gpt4 book ai didi

c# - 字符串或其他密封类的强类型

转载 作者:太空狗 更新时间:2023-10-29 19:41:31 25 4
gpt4 key购买 nike

我用通用术语来表述我的示例,因为它无需深入探讨我的具体问题细节就可以理解要点。

假设您有一堆将字符串作为参数的方法。假设一个字符串是一个人的“名字”,另一个是一个人的“姓氏”。可能还有其他字符串,例如“最喜欢的食物”。

现在,在您的代码中,您不断发现运行时错误,因为您混淆了参数。您可以调换“名字”和“姓氏”的顺序,或者在您应该使用另一个时使用其中一个。强类型语言的值(value)在于它会在构建时而不是运行时发现这些错误。

因此,一种可能的解决方案是仅从字符串派生类。

public class FirstName : String
{
}

public class LastName : String
{
}

现在,如果您传递了错误类型的字符串,编译器会报错。以上是不可能的,因为 String 是密封的。此外,“using”语句将不起作用(我认为),因为当我将它们混淆时编译器不会提示。

using LastName = String;

当然,我可以构建包装字符串的类,然后编写强制转换方法,但这似乎比它值得的麻烦多了。

最佳答案

我不知道您的目标是什么,但您似乎对此很认真 :) 因此一个可能的解决方案是使用通用容器类。它确实不如从密封类继承舒服。

public class Container<T>
{
public T Value { get; protected set; }

public Container(T value)
{
Value = value;
}
}

public class FirstName : Container<string>
{
public FirstName(string firstName) : base(firstName) { }
}

public class LastName : Container<string>
{
public LastName(string lastName) : base(lastName) { }
}

public class Age : Container<int>
{
public Age(int age) : base(age) { }
}

public class Program
{
public void Process(FirstName firstName, LastName lastName, Age age)
{

}
}

关于c# - 字符串或其他密封类的强类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9877272/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com