gpt4 book ai didi

C# 将属性/字段设置为无值

转载 作者:行者123 更新时间:2023-11-30 22:35:05 32 4
gpt4 key购买 nike

我认为这是一个常见问题。假设我有一个典型的 Person 类和一个 Car 类,它有一个 Person 类型的字段/属性所有者:

public class Car
{
Person owner;
}

但有时我希望这辆车没有主人。处理此问题的推荐方法是什么。 Nullable 类型不起作用,因为引用类型已经可以为 null。(编辑:澄清,我的意思是你不能使用 Person?owner;)

我可以添加一个 bool 字段/属性:hasOwner,但这看起来相当冗长,所以我想在 Person 类中创建一个非 Person 类型的静态成员,如下所示:

namespace ConsoleApplication2
{
public class Person
{
public static Person none;
public int age;

static Person()
{
none = new Person();
}
}

public class Car
{
public Person owner;
}

class Program
{
static void Main(string[] args)
{
Car dumped = new Car();
dumped.owner = Person.none;
Console.ReadLine();
}
}
}

虽然我没有在实际应用程序中使用过它,但它可以编译并运行。然后我想我可以创建一个没有成员的通用类:

namespace ConsoleApplication2
{
public class NoneMember<T> where T : new()
{
public static T none;

static NoneMember ()
{
none = new T();
}
}

public class Person: NoneMember<Person>
{
}

public class Car
{
public Person owner;
}

class Program
{
static void Main(string[] args)
{
Car dumped = new Car();
dumped.owner = Person.none;
if (dumped.owner == Person.none)
Console.Write("This car has no owner");
Console.ReadLine();
}
}
}

编译和运行,虽然如果你想从 person 类继承会有问题,具有通用和非通用版本。更有经验的 c# 程序员的想法将不胜感激。

编辑:使用 null 表示 none 的问题是您不能将 null 作为方法/构造函数参数传递。 null 表示未设置值,与 value is none 不同。

Edit2:我以为我在传递 null 参数时抛出了异常。不确定发生了什么。我不知道现在是否可以重现错误。

最佳答案

我通常保持原样,如果 Car 的所有者为 null,这意味着它没有所有者。没有必要复杂化,如果有值(value) - 它有所有者,否则它没有(系统已知的)所有者。此策略的异常(exception)情况是您需要日志数据库,但在这种情况下,您通常可以拥有版本化的汽车和车主并使用相同的原则。

关于C# 将属性/字段设置为无值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7552926/

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