C#创建一个不可为空的字符串。可能吗?不知何故? - c#

因此,您不能继承string。您不能创建不可为空的string。但是我想这样做。我想要一个类,我们将其称为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";

这将允许从string进行投射。在幕后,它执行与示例相同的转换,您不必为每个属性都键入它。我确实想知道这对您的应用程序的可维护性有什么影响。

Java string.hashcode()提供不同的值 - java

我已经在这个问题上停留了几个小时。我已经注释掉所有代码,认为这与数组超出范围有关,但是这种情况仍在发生。我正在尝试使用扫描仪从文件中读取输入,存储数据并稍后使用哈希码获取该数据。但是哈希值不断变化。public static void main(String[] args) { //only prior code is to access data char…

string.split(“ _(B”) - java

基本上,这行代码行不通,我不确定原因: String[] stringHolder = string.split("_(B"); 我收到此错误:索引3附近的未封闭组此行代码有效: String[] stringHolder = string.split("_B"); 因此,这使我相信它是由“(”引起的。有人可以告诉我如…

php-ga解析错误:语法错误,意外的T_STRING - php

我正在尝试进行服务器端Google Analytics(分析)跟踪,并遇到了php-ga。由于某种原因,这会引发错误:解析错误:语法错误,意外的T_STRING,在第85行的/home/priedelc/public_html/refll/api_ga.php中预期为T_CONSTANT_ENCAPSED_STRING或'('-其中85是使用UnitedPr…

为什么jvm每次我们使用new关键字创建字符串时都会创建新字符串对象 - java

如果jvm创建string pool进行内存优化,那么为什么每次我们使用new关键字创建字符串时,即使它存在于string pool中,它也会创建新的Object呢? 参考方案 ...为什么每次我们使用new关键字创建字符串时,即使字符串池中存在Java,Java也会创建新的Object?因为您明确告诉过! new运算符始终创建一个新对象。 JLS 15.9…

如何在会话状态下添加List <string> - c#

有没有办法在会话中添加列表?或以其他方式在另一个页面中传递List的值? 参考方案 List<string> ast = new List<string>(); ast.Add("asdas!"); Session["stringList"] = ast; List<string> …