Tag: 参数

IList是否通过了价值?

除非在参数上使用ref或out关键字,否则将值类型参数传递给c#中的函数。 但这也适用于参考类型吗? 具体来说,我有一个函数,它采用IList 。 传递给我的函数的列表是否是包含其包含对象的副本的列表的副本? 或者对列表的修改是否也适用于呼叫者? 如果是这样的话 – 我可以通过一种聪明的方式传递副本吗? public void SomeFunction() { IList list = new List(); list.Add(new Foo()); DoSomethingWithCopyOfTheList(list); .. } public void DoSomethingWithCopyOfTheList(IList list) { // Do something }

使用参数名称动态创建委托

嗨,我正在尝试创建一个动态创建一个委托的函数,该委托具有相同的返回值和与它作为参数接收的MethodInfo相同的参数,这也是相同的参数名称非常重要! 到目前为止我所做的是创建一个函数,该函数返回一个lambda,它接收相同的参数类型,并且具有与MethodInfo相同的返回值,但它没有参数名称: static void Example() { Person adam = new Person(); MethodInfo method = typeof(Person).GetMethod(“Jump”); Delegate result = CreateDelegate(adam, method); result.DynamicInvoke((uint)4, “Yeahaa”); } private static Delegate CreateDelegate(object instance, MethodInfo method) { var parametersInfo = method.GetParameters(); Expression[] expArgs = new Expression[parametersInfo.Length]; List lstParamExpressions = new List(); for (int i = 0; i < expArgs.Length; i++) { […]

System.Data.SQLite参数问题

我有以下代码: try { //Create connection SQLiteConnection conn = DBConnection.OpenDB(); //Verify user input, normally you give dbType a size, but Text is an exception var uNavnParam = new SQLiteParameter(“@uNavnParam”, SqlDbType.Text) { Value = uNavn }; var bNavnParam = new SQLiteParameter(“@bNavnParam”, SqlDbType.Text) { Value = bNavn }; var passwdParam = new SQLiteParameter(“@passwdParam”, SqlDbType.Text) {Value = passwd}; var […]

在C#中的表单之间来回传递参数

我正在创建一个应用程序,用户将单击form1上的按钮,这将导致form2显示。 然后,用户将在form2上填写聊天,然后单击将关闭form2的按钮,并将参数发送回form1进行处理。 我怎么能在C#中做到这一点? 我见过人们使用属性来做到这一点,但是这些例子还不够清楚。 有人可以提供一些示例代码,告诉我如何传递参数吗? 我更喜欢属性方法,但只要它有效,我会把它算作答案。

有没有办法获取传递给方法的参数数组?

说我有一个方法: public void SomeMethod(String p1, String p2, int p3) { #if DEBUG object[] args = GetArguments(); LogParamaters(args); #endif // Do Normal stuff in the method } 有没有办法检索传递给方法的参数数组,以便记录它们? 我有很多方法,并希望避免手动将参数按名称传递给记录器,因为人为错误将不可避免地蔓延。 我猜它会以某种forms涉及reflection – 这很好,因为它只会用于调试目的。 更新 更多信息: 我无法更改SomeMethod的方法签名,因为它作为WebMethod公开,并且必须复制它模拟的遗留系统。 遗留系统已经记录了传入的参数。从新实现开始将包装遗留系统,所以我希望记录进入C#版本的参数,以便我可以validation正确的参数是否传入按正确的顺序。 我只是想记录参数值和顺序,而不是它们的名字。

C#:如何将null传递给期望ref的函数?

我有以下function: public static extern uint FILES_GetMemoryMapping( [MarshalAs(UnmanagedType.LPStr)] string pPathFile, out ushort Size, [MarshalAs(UnmanagedType.LPStr)] string MapName, out ushort PacketSize, ref Mapping oMapping, out byte PagesPerSector); 我想这样称呼: FILES_GetMemoryMapping(MapFile, out size, MapName, out PacketSize, null, out PagePerSector); 不幸的是,我不能在需要类型ref Mapping的字段中传递null而且没有强制转换我已尝试修复此问题。 有什么建议?

带参数的基本BackgroundWorker用法

我想要在后台线程中执行的进程密集型方法调用如下所示: object.Method(paramObj, paramObj2); 所有这三个对象都是我创建的对象。 现在,从我看到的最初示例中,您可以将对象传递给后台工作者的DoWork方法。 但是,如果我需要将额外的参数传递给该对象,我应该怎么做呢,就像我在这里做的那样? 我可以将它包装在一个对象中并完成它,但我认为在其他人的输入上是明智的。

C#输出参数性能

C#中的参数是否具有我应该了解的性能影响? (像例外) 我的意思是,在一个循环中使用out参数的方法是一个好主意,每秒运行几百万次? 我知道它很难看,但我使用的方式与Int32.TryParse使用它们一样 – 返回一个bool来判断一些validation是否成功,并且如果成功则out包含一些额外数据的out参数。

最佳实践:ref参数或返回值?

实际上我正在做一个列表作为参考参数,如下所示: public static List ListMethod(List result) 我也看到有些人也这样做了: public static void ListMethod(ref List result) 如果我没有错,“my”方法也将list作为参考参数,你应该能够像在他的方法中使用“other”一样使用它。 但是对我来说,输入参数,对它做一些事情并在方法返回值中返回它似乎更“干净”。 对一种方法或另一种方法有任何好的论据吗?

C#PInvoke out字符串声明

在C#PInvoke中,如何传递一个字符串缓冲区,以便C DLL填充它并返回? 什么是PInvoke宣言? C函数声明是 int GetData(char* data, int buflength); 在C#中,我已将其声明为 [DllImport(DllName)] static extern Int32 GetData([MarshalAs(UnmanagedType.LPStr)]StringBuilder receiveddata, Int32 buflen); 这是对的吗? 我像这样传递StringBuilder变量 int bufferLength = 32; StringBuilder data = new StringBuilder(bufferLength); int result = GetData(data, bufferLength); 我想知道它是否正确? 谢谢