C# 创建不可为 null 的字符串。是否可以?不知何故?

标签 c# string non-nullable

所以你不能继承string。您无法创建不可为 null 的字符串。但我想这样做。我想要一个类,我们称之为 nString,它返回一个默认值,否则该值将为 null。我有 JSON 对象,谁知道有多少个空字符串,甚至空对象。我想创建具有永远不会返回 null 的字符串的结构。

public struct Struct
{
    public nString value;
    public nString value2;
}

我想我可以做这样的事情:

public struct Struct
{
    public string val { get { return val ?? "N/A"; } set { val = value; } }
    public string val2 { get { return val2 ?? "N/A"; } set { val2 = value; } };
}

但这还有很多工作要做。有什么办法可以做到这一点吗?

最佳答案

您当然可以拥有以下nString结构:

public struct nString
{
    public nString(string value)
        : this()
    {
        Value = value ?? "N/A";
    }

    public string Value
    {
        get;
        private set;
    }

    public static implicit operator nString(string value)
    {
        return new nString(value);
    }

    public static implicit operator string(nString value)
    {
        return value.Value;
    }
}

...

public nString val 
{ 
    get;
    set;
}

obj.val = null;
string x = obj.val; // <-- x will become "N/A";

这将允许从字符串进行转换。在底层,它执行与您的示例相同的转换,您只是不必为每个属性都键入它。我确实想知道这对您的应用程序的可维护性有何影响。

关于C# 创建不可为 null 的字符串。是否可以?不知何故?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26554003/

相关文章:

c# - 如果您可以创建不可为空的引用类型怎么办?

c#-8.0 - 有什么理由不总是使用 C# 8.0 的不可空引用类型吗?

c# - 如何在不使用 Azure 的情况下在控制台应用程序的 Visual Studio 2015 诊断工具窗口中查看 SQL 事件(Application Insights)?

c# - 在 MVVM 中实现 ICommand 时,我遗漏了一些东西

python - 在双 for 循环 python 中打印字符串的每一行时出现问题

regex - 拆分保留重复分隔符

c# - 为什么 integer == null 在 C# 中是一个有效的 boolean 表达式?

c# - 正则表达式 C#

c# - 使用C#在Excel中更改MS Excel行颜色

string - gsubbing 一个字符串,其模式包含 Lua 中的换行符