泛型方法设置基类属性的值

whi*_*zle 2 c# generics

我正在编写一个通用方法来将设置值放在基类上

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.statusT是类型参数,在给定的上下文中无效

我已经用谷歌搜索过了,但找不到我的答案 - 请帮忙。

谢谢。

Ruf*_*s L 6

如果要设置泛型类型的属性,则需要该类型的实例。要获得一个实例,我们需要让调用者将一个实例作为参数传入,或者创建一个新实例(如果我们选择此选项,我们还需要包含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)