C# - 匿名对象作为“输出”参数?

时间:2021-02-05 18:55:16

标签: c# anonymous-types generic-type-argument out-parameters

我正在尝试将匿名对象设为“输出”参数。

此代码编译:

public T GenericTest<T>(T Input)
{
  return Input;
}

public void AnonymousObjectTest()
{
  var AnonObj = new { Prop = "hello" };
  var Str = GenericTest(AnonObj).Prop;
  Console.WriteLine(Str); //outputs "hello" to the console
}

但是,我怎样才能让它发挥作用?请参阅以下内容。我正在尝试使用匿名对象作为“OutParamTest”方法的“输出”参数。

老实说,它应该与返回泛型类型 T 没有任何不同,因为该方法的输出类型被声明为与输入相同。但是,我不知道在方法调用中除了“对象”之外要使用哪种类型:

public void OutParamTest<T>(T Input, out T Output)
{
  Output = Input;
}

public void AnonymousObjectTest()
{
  var AnonObj = new { Prop = "hello" };

  OutParamTest(AnonObj, out object Test); //how can I make the 'out' parameter type the same as the 'input' parameter?

  var Str = Test.Prop; //CS1061: 'object' does not contain a definition for 'Prop'

  Console.WriteLine(Str);
}

2 个答案:

答案 0 :(得分:2)

您可以:

var obj = new { A = 1 };
OutParamTest(obj, out var obj2);

使用 C# 3.0 中为匿名类型引入的 var,而 C# 7.0 中的 out 可以与 var obj = new { A = 1 }; var obj2 = obj; OutParamTest(obj, out obj2); 内联。

在较旧的 C# 编译器上,您还可以:

var obj2 = obj

(作为匿名类型和引用类型,app.use(express.static('public')); 成本低廉)

答案 1 :(得分:0)

你可以试试动态类型。

public static void OutParamTest<T>(T Input, out T Output)
{
    Output = Input;
}

public static void AnonymousObjectTest()
{
    var AnonObj = new { Prop = "hello" };

    OutParamTest(AnonObj, out dynamic Test);

    var Str = Test.Prop;

    Console.WriteLine(Str);
}

使用 Dynamic 类型,您可以访问 Type 内的 Prop。

相关问题