提问人:user3163495 提问时间:4/27/2021 最后编辑:user3163495 更新时间:4/27/2021 访问量:910
如何将匿名对象传递给具有多个泛型类型的泛型方法?[复制]
How to pass an anonymous object to a generic method with multiple generic types? [duplicate]
问:
假设我有这个通用方法:
public T1 GenericTest<T1, T2>(T2 Obj, out T2 NewObj)
{
NewObj = Obj;
return default;
}
如何将匿名对象传递给它?
在以下示例中调用方法时,我该如何代替“???”:
var Anonymous = new { Prop1 = "foo", Prop2 = "bar" };
GenericTest<bool,???>(Anonymous, out var NewAnonymous);
NewAnonymous.Prop1 = "Hello";
NewAnonymous.Prop2 = "World";
//etc...
我的目标是在调用方法后,让 Visual Studio 的 Intellisense 在“NewAnonymous”对象上选取“Prop1”和“Prop2”。这需要推断匿名类型,但我不知道如何使用多个类型说明符来做到这一点。
注意:我希望能够访问从“out”参数返回的匿名对象的属性,因此键入“object”将不够好。如果我将“object”作为类型,我将无法从方法外部访问“NewAnonymous”对象上的属性“Prop1”和“Prop2”。
注 2:我不需要从方法中访问匿名对象的属性。
编辑:匿名对象确实可以传递给泛型方法。我只是不知道如何使用具有多个类型说明符的泛型方法做到这一点(这就是我提出这个问题的原因)。下面是一个只有一个类型说明符的示例:
public void SingleGenericTypeTest<T>(T Obj, out T NewObj)
{
NewObj = Obj;
}
var Anonymous = new { Prop1 = "foo", Prop2 = "bar" };
SingleGenericTypeTest(Anonymous, out var NewAnonymous);
NewAnonymous.Prop1 = "Hello";
NewAnonymous.Prop2 = "World";
//etc...
答:
0赞
pinkfloydx33
4/27/2021
#1
类型推断要求推断所有泛型类型。如果你的方法采用了 type 的参数,则可以省略这些类型。不幸的是,您不能在这里这样做,因为不存在第一种类型的参数,并且无法指定不可描述的匿名类型。T1
您将得到的最好的是一个帮助程序方法,其中包含一个泛型参数,该参数传递到第二个泛型参数,指定两种类型:
public bool GenericHelper<T>(T Obj, out T NewObj)
{
return GenericTest<bool, T>(Obj, out NewObj);
}
public T1 GenericTest<T1, T2>(T2 Obj, out T2 NewObj)
{
NewObj = Obj;
return default;
}
然后,您可以使用:
var Anonymous = new { Prop1 = "foo", Prop2 = "bar" };
bool res = GenericHelper(Anonymous, out var NewAnonymous);
虽然你想这样做仍然没有多大意义。
评论
CreateInstance