我正在编写一个通用方法来将设置值放在基类上
public class StageOne: DefaultValues
{
//StageOne properties
}
public class DefaultValues
{
public string status { get; set; }
public string message { get; set; }
}
private T SetValue<T>() where T : DefaultValues
{
T.message = "Good Job";
T.status = "Done";
return default(T);
}
Run Code Online (Sandbox Code Playgroud)
我在T.message和上遇到错误T.status;T是类型参数,在给定的上下文中无效
我已经用谷歌搜索过了,但找不到我的答案 - 请帮忙。
谢谢。
如果要设置泛型类型的属性,则需要该类型的实例。要获得一个实例,我们需要让调用者将一个实例作为参数传入,或者创建一个新实例(如果我们选择此选项,我们还需要包含new()约束):
第一个选项 - 让调用者传入该类型的实例(在这种情况下不需要返回值,因为调用者已经拥有对我们正在更改的实例的引用):
private void SetValue<T>(T input) where T : DefaultValues
{
input.message = "Good Job";
input.status = "Done";
}
Run Code Online (Sandbox Code Playgroud)
第二个选项 - 在方法内创建该类型的新实例(注意添加的通用约束,new()):
private T SetValue<T>() where T : DefaultValues, new()
{
T result = new T();
result.message = "Good Job";
result.status = "Done";
return result;
}
Run Code Online (Sandbox Code Playgroud)
可以简化为:
private static T SetValue<T>() where T : DefaultValues, new()
{
return new T {message = "Good Job", status = "Done"};
}
Run Code Online (Sandbox Code Playgroud)