为 GUID 定义增量运算符
Defining Increment Operator for GUID
我需要逐渐增加 GUID,我使用它成功实现了
但是现在,我想通过增量运算符 ++ 实现它,因为我希望我的代码看起来 漂亮 和 简洁。
我的代码:
public class GuidOps
{
public static Guid operator ++(Guid input)
{
return input.Increment(); //Increment works as intended here
}
}
这不起作用,因为 ++ 运算符所需的类型必须是声明该运算符的 class 的类型。
显然我不能覆盖 GUID 本身的声明
您认为可以在 GUID 上定义 ++ 吗?
因为 Guid
是密封的,唯一的方法是创建一个包装器,然后更新包装器上的 Guid 属性。但是,它带有一些免责声明...
- 这非常令人困惑和愚蠢。不要这样做。 这种行为没有任何预期或合理之处。会导致可维护性问题
- 这仍然没有真正将增量运算符添加到 Guid 定义本身;它只将运算符添加到包装器中。现在我们为了抽象而添加了抽象,但什么也没解决。代码可读性较差。
也就是说,以下内容至少会让您接近重写运算符,并指出因试图使代码过于聪明而产生的问题:
public class GuidWrapper
{
public Guid GuidInstance { get; set; } = Guid.NewGuid();
public static GuidWrapper operator ++(GuidWrapper input)
{
input.GuidInstance = input.GuidInstance.Increment();
return input;
}
}
var wrapper = new GuidWrapper();
var guid = wrapper.GuidInstance;
var guid2 = wrapper++.GuidInstance;
这是不可能的,因为 GUID 是一个密封结构
我需要逐渐增加 GUID,我使用它成功实现了
但是现在,我想通过增量运算符 ++ 实现它,因为我希望我的代码看起来 漂亮 和 简洁。
我的代码:
public class GuidOps
{
public static Guid operator ++(Guid input)
{
return input.Increment(); //Increment works as intended here
}
}
这不起作用,因为 ++ 运算符所需的类型必须是声明该运算符的 class 的类型。
显然我不能覆盖 GUID 本身的声明
您认为可以在 GUID 上定义 ++ 吗?
因为 Guid
是密封的,唯一的方法是创建一个包装器,然后更新包装器上的 Guid 属性。但是,它带有一些免责声明...
- 这非常令人困惑和愚蠢。不要这样做。 这种行为没有任何预期或合理之处。会导致可维护性问题
- 这仍然没有真正将增量运算符添加到 Guid 定义本身;它只将运算符添加到包装器中。现在我们为了抽象而添加了抽象,但什么也没解决。代码可读性较差。
也就是说,以下内容至少会让您接近重写运算符,并指出因试图使代码过于聪明而产生的问题:
public class GuidWrapper
{
public Guid GuidInstance { get; set; } = Guid.NewGuid();
public static GuidWrapper operator ++(GuidWrapper input)
{
input.GuidInstance = input.GuidInstance.Increment();
return input;
}
}
var wrapper = new GuidWrapper();
var guid = wrapper.GuidInstance;
var guid2 = wrapper++.GuidInstance;
这是不可能的,因为 GUID 是一个密封结构