c# - 在属性 setter 中采用多种类型

标签 c# types properties setter

我想选择设置具有多种类型的属性并且正在努力寻找解决方案。

public static PropertyType Property
        {
            get { return Property;}
            set {
                if (value.GetType() == typeof(PropertyType))
                {
                    Property = value;                       
                }

                //Or any other type
                if (value.GetType() == typeof(string))
                {
                    Property = FunctionThatReturnsPropertyType(value);
                }
            }
        }

我希望这是有道理的,我只将 Property 设置为一种类型,但我希望能够将其分配给其他类型,然后在 setter 中转换它们 - 这可能吗?

最佳答案

您想要的看起来像是设计错误。 在 C# 中,属性的 setter 和 getter 始终具有相同的类型。所以你基本上有下一个选择:

  • 将您的属性类型设置为 object(如果您想获得更糟糕的设计,则设置为 dynamic)并按照您在问题中所述在 setter 中转换值 - 我强烈建议避免这种方法
  • 远离 property 概念,创建单独的方法来获取字段的值并从不同的类型分配。 如果您在编译时不知道类型,此方法将允许您分配值,而 getter 方法仍将被正确键入。但总的来说,它看起来仍然是糟糕的设计。
  • 在属性之外进行所有转换,首选此解决方案。您应该知道在每种情况下您将使用哪种类型

关于c# - 在属性 setter 中采用多种类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27227177/

相关文章:

python - 在 Python 中定义未更改的公共(public)变量是一个好习惯吗?

c# - 在 API 代码中,对列表类型 C# 属性使用私有(private) setter 是个好主意吗?

c# - RichTextBox 输入非常滞后

c# - Datagridview强制在一列中只选择一个复选框

python - 如何检查对象的类型为 'dict_items' ?

C# 和转换泛型参数

java - 使用原始类型实现通用接口(interface)

Python - 类定义中的多个@property 语句?

c# - 如何在 .NET 中使用新的进度控制(如 Windows 文件传输中所示)?

c# - 不要从许多方法中分配字段