C# 访问对象函数的属性<;S、 T>;
我不知道C# 访问对象函数的属性<;S、 T>;,c#,C#,我不知道Func的全部操作,所以也许我的问题对你们中的一些人来说很简单或显而易见 我有一个函数的以下标题: private static T MyMethod<S, T>(Func<S, T> testFunc) where S : class, new() { //Code.... } private static T MyMethod(Func testFunc),其中S:class,new() { //代码。。。。 } 我想从S对象访问属性。可能吗 例如:
Func
的全部操作,所以也许我的问题对你们中的一些人来说很简单或显而易见
我有一个函数的以下标题:
private static T MyMethod<S, T>(Func<S, T> testFunc) where S : class, new()
{
//Code....
}
private static T MyMethod(Func testFunc),其中S:class,new()
{
//代码。。。。
}
我想从S
对象访问属性。可能吗
例如:S.name
对不起,我的英语不好。你能写:
private static T MyMethod<S, T>(Func<S, T> testFunc) where S : S, new()
{
//Code....
}
private static T MyMethod(Func testFunc),其中S:S,new()
{
//代码。。。。
}
你是哪一类人?或者您的抽象类类型,其中您已经有一些公共属性了?您可以写:
private static T MyMethod<S, T>(Func<S, T> testFunc) where S : S, new()
{
//Code....
}
private static T MyMethod(Func testFunc),其中S:S,new()
{
//代码。。。。
}
你是哪一类人?或者您的抽象类类型已经有了一些公共属性?您的方法所知道的关于
S
的所有信息都是,它是一个类,可以实例化。它不知道是否有名为name
的属性。您可能需要要求该参数从具有预期属性的接口或类继承
您还可以尝试强制转换为已知类型,了解如果对象不是该类型,强制转换可能会失败。您的方法对
S
的所有了解都是它是一个类,可以实例化。它不知道是否有名为name
的属性。您可能需要要求该参数从具有预期属性的接口或类继承
您还可以尝试强制转换为已知类型,了解如果对象不是该类型,强制转换可能会失败。首先,您应该知道,在您的方法中,您没有
的对象。您有一个函数,它接受S
并返回T
。在本例中,我假设您的方法负责生成S
实例,并将它们作为参数传递给testFunc
但是,您可以使用反射来访问S
的类型信息:
private static T MyMethod<S, T>(Func<S, T> testFunc) where S : class, new()
{
var typeofS = typeof(S);
var s = new S();
var defaultName = (string)(typeofS.GetProperty("Name").GetValue(s, null));
}
private static T MyMethod(Func testFunc),其中S:class,new()
{
var typeofS=typeof(S);
var s=新的s();
var defaultName=(字符串)(typeofS.GetProperty(“Name”).GetValue(s,null));
}
(我希望这是显而易见的,但是,如果您得到的S
没有Name
属性,反射将失败;生产代码当然应该做更多的null
检查、异常处理等)首先,您应该知道,在您的方法中,没有S
对象。您有一个函数,它接受S
并返回T
。在本例中,我假设您的方法负责生成S
实例,并将它们作为参数传递给testFunc
但是,您可以使用反射来访问S
的类型信息:
private static T MyMethod<S, T>(Func<S, T> testFunc) where S : class, new()
{
var typeofS = typeof(S);
var s = new S();
var defaultName = (string)(typeofS.GetProperty("Name").GetValue(s, null));
}
private static T MyMethod(Func testFunc),其中S:class,new()
{
var typeofS=typeof(S);
var s=新的s();
var defaultName=(字符串)(typeofS.GetProperty(“Name”).GetValue(s,null));
}
(我希望这是显而易见的,但是,如果您得到的S
没有Name
属性,反射将失败;生产代码当然应该做更多的null
检查、异常处理等)您不能为S
使用接口吗?然后您将执行其中的S:IMyInterface
。如果您这样做,您将能够访问IMyInterface
@Claudio Redi上定义的S
属性。如果您不使用接口,这是不可能的吗?如果我使用接口,该方法将保持耦合,而不是我想要的:(听起来你想从MyMethod
内部访问S
类型的任何对象,该对象将被放入testFunc
(从任何其他位置)。也就是说(据我所知)不可能,也不应该如何使用。你不能为S
使用接口吗?那么你可以在中使用S:IMyInterface
。如果你这样做,你将能够访问IMyInterface
@Claudio Redi上定义的S
属性,如果你不使用接口,这是不可能的吗?如果我使用In面对面,该方法将保持耦合,而不是我想要的:(听起来你想从MyMethod
内部访问MyMethod
类型的任何对象,该对象将被放入testFunc
(从任何其他位置)。也就是说(据我所知)不可能,也不是应该如何使用。S是一个对象,但没有基类,该对象有不同的属性,我需要访问所有…我解释一下?它将始终是同一个类?如果是,您可以用以下内容替换代码:private static T MyMethod(Func etstFunc)
我想避免耦合方法…我在另一个项目中使用了它…tnksYou可以有一个公共抽象类,它将在不同的子类之间共享相同的属性。如果您想在方法的内容中使用它们…强制转换/反射不是一个合适的解决方案。(它会起作用,但不是更好的…)S是一个对象,但没有基类,该对象有不同的属性,我需要访问所有…我解释一下?它将始终是同一个类?如果是,您可以用以下内容替换代码:private static T MyMethod(Func etstFunc)
我想避免耦合方法…我在另一个项目中使用了它…tnksYou可以有一个公共抽象类,它将在不同的子类之间共享相同的属性。如果您想在方法的内容中使用它们…强制转换/反射不是一个合适的解决方案。(它会起作用,但不是更好的…)非常感谢,我会试试这个。非常感谢,我会试试这个