方法test(params object[] args)中能否制定其中一个参数为out参数

llxzj60 2015-10-07 10:30:23
如题,加入我现在有个方法如下:

test(params object[] args){
// do something
}

调用这个参数时能否执行参数为ref或out,我知道不指定也可以调用,像如下代码:

string str1="";
string str2="";
test(str1,str2);

但我想这样调用:

string str1="";
string str2="";
test(ref str1,out str2);

能不能实现呢》????
...全文
331 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
llxzj60 2015-10-10
  • 打赏
  • 举报
回复
引用 12 楼 qbilbo 的回复:
前面属性里忘记加特性了。 [DataContract] [Serializable] public class result { [DataMember] public string str1; [DataMember] public string str2; ... }
谢谢,但此处示例与wcf无关
llxzj60 2015-10-10
  • 打赏
  • 举报
回复
引用 13 楼 shingoscar 的回复:
[quote=引用 3 楼 llxzj60 的回复:] [quote=引用 2 楼 wyd1520 的回复:] 不行,你只能 out 数组或List,这些
MethodInfo.Invoke方法是怎么实现的?我觉得如果按Invoke方法实现应该也是可以的,不知道行不行[/quote] 你所谓的MethodInfo.Invoke是怎么样的?[/quote] MethodInfo.Invoke调用不用制定out/ref,Invoke根据方法的out/ref标记决定是否返回值
iyomumx 2015-10-10
  • 打赏
  • 举报
回复
虽然传递ref/out可变参数是可行的,但和楼主想象中差距甚远,我猜你是想要这样的:
        static void test(params object[] args)
        {
            args[0] = "12";
            args[1] = "34";
        }

        static void Main(string[] args)
        {
            string str1 = "1";
            string str2 = null;
            object[] p = new object[] { str1, str2 };
            test(p);
            str1 = (string)p[0];
            str2 = (string)p[1];
            Console.WriteLine(str1); //“12”
            Console.WriteLine(str2); //“34”
        }
Poopaye 2015-10-10
  • 打赏
  • 举报
回复
引用 14 楼 llxzj60 的回复:
[quote=引用 13 楼 shingoscar 的回复:] 你所谓的MethodInfo.Invoke是怎么样的?
MethodInfo.Invoke调用不用制定out/ref,Invoke根据方法的out/ref标记决定是否返回值[/quote] Invoke实际ref/out操作的是传入的那个object[],本身变量得值是不变的,你可以看下面的z的值没变
		static void Main(string[] args)
		{
			object z = 1;
			object[] p = new object[] { z };
			typeof(Program).GetMethod("x").Invoke(null, p);
			Console.WriteLine(z);
			Console.WriteLine(p[0]);
		}

		public static void x(ref int z)
		{
			z = 999;
		}
ajianchina 2015-10-08
  • 打赏
  • 举报
回复

	test(ref object[] args){
	// do something
	}


	string str1="";
	string str2="";
	object[] obj = { str1, str2 };
	test(ref obj);
	str1 = obj[0].ToString();
	str2 = obj[1].ToString();
llxzj60 2015-10-08
  • 打赏
  • 举报
回复
引用 6 楼 ajianchina 的回复:
楼主兄弟,.net实现万能函数的重任就靠你了,你可要加油啊。
不需要万能。。。只是现在wcf客户端调用服务端函数,服务端反射得到的out参数值结果无法返回到客户端,如果客户端直接调用服务端的out参数是没有问题的
Poopaye 2015-10-08
  • 打赏
  • 举报
回复
引用 3 楼 llxzj60 的回复:
[quote=引用 2 楼 wyd1520 的回复:] 不行,你只能 out 数组或List,这些
MethodInfo.Invoke方法是怎么实现的?我觉得如果按Invoke方法实现应该也是可以的,不知道行不行[/quote] 你所谓的MethodInfo.Invoke是怎么样的?
qbilbo 2015-10-08
  • 打赏
  • 举报
回复
前面属性里忘记加特性了。 [DataContract] [Serializable] public class result { [DataMember] public string str1; [DataMember] public string str2; ... }
qbilbo 2015-10-08
  • 打赏
  • 举报
回复
引用 7 楼 llxzj60 的回复:
[quote=引用 6 楼 ajianchina 的回复:] 楼主兄弟,.net实现万能函数的重任就靠你了,你可要加油啊。
不需要万能。。。只是现在wcf客户端调用服务端函数,服务端反射得到的out参数值结果无法返回到客户端,如果客户端直接调用服务端的out参数是没有问题的[/quote] 如果是WCF的话,就老老实实在返回值里脑筋吧。
[DataContract]
[Serializable]
public class result
{
    public string str1;
    public string str2;
    ...
}

result test(params object[] args);
wjq 2015-10-08
  • 打赏
  • 举报
回复
本身就是ref输出的,以反射类MethodInfo的Invoke为例, public object Invoke(object obj, object[ ] parameters) System.Reflection.MethodBase 的成员 如果它调用的方法是带out或ref的,parameters你传过去的引用自然也会变。
老秋先生 2015-10-08
  • 打赏
  • 举报
回复
当然没有,但可以采用引用对象的特性,自然也就满足了你的要求
ajianchina 2015-10-07
  • 打赏
  • 举报
回复
楼主兄弟,.net实现万能函数的重任就靠你了,你可要加油啊。
llxzj60 2015-10-07
  • 打赏
  • 举报
回复
引用 3 楼 llxzj60 的回复:
[quote=引用 2 楼 wyd1520 的回复:] 不行,你只能 out 数组或List,这些
MethodInfo.Invoke方法是怎么实现的?我觉得如果按Invoke方法实现应该也是可以的,不知道行不行[/quote] 或者说c#用out和ref参数传入是怎么个实现的??
llxzj60 2015-10-07
  • 打赏
  • 举报
回复
引用 4 楼 llxzj60 的回复:
[quote=引用 3 楼 llxzj60 的回复:] [quote=引用 2 楼 wyd1520 的回复:] 不行,你只能 out 数组或List,这些
MethodInfo.Invoke方法是怎么实现的?我觉得如果按Invoke方法实现应该也是可以的,不知道行不行[/quote] 或者说c#用out和ref参数传入是怎么个实现的??[/quote] 或者说c#的out和ref标记是怎么实现的?
llxzj60 2015-10-07
  • 打赏
  • 举报
回复
引用 2 楼 wyd1520 的回复:
不行,你只能 out 数组或List,这些
MethodInfo.Invoke方法是怎么实现的?我觉得如果按Invoke方法实现应该也是可以的,不知道行不行
本拉灯 2015-10-07
  • 打赏
  • 举报
回复
不行,你只能 out 数组或List,这些
crystal_lz 2015-10-07
  • 打赏
  • 举报
回复
不知道 不过 你可以 把参数改为 test(List<object> lst) 你的lst是传的引用

110,545

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧