使用显式运算符转换从枚举转换为字符串并返回
Convert from enum to string and back using explicit operator casting
我想使用显式运算符转换逻辑从枚举转换为字符串。为什么我会收到“用户定义的转换必须转换为封闭类型或从封闭类型转换”?应该可以这样做,因为类型是封闭类型的子类型。
class ConversionDemo{
public enum Letters { A, B, C };
public String LetterName { get; }
public void DoWork(ConversionDemo.Letters letter) {
this.LetterName = (String)letter;
}
public static explicit operator String(ConversionDemo.Letters letter) {
if (letter == Letters.A) { return "A"; }
if (letter == Letters.B) { return "B"; }
if (letter == Letters.C) { return "C"; }
return "?";
}
public static explicit operator ConversionDemo.Letters(String s) {
if (s == "A") { return Letters.A; }
if (s == "B") { return Letters.B; }
return Letters.C;
}
}
"enclosing type" 是声明该方法的实际 class 或结构,不适用于任何 nested types。因此必须在 String
或 Letters
的定义中定义运算符。两者都不可能。
这个问题涉及类似的问题:explicit conversion operator error when converting generic lists。
您不能为枚举类型定义转换。您只能为 类 或结构定义它。看到这个 link.
因此,您需要的替代方法是更改转换并将其定义为扩展方法:
public enum Letters { A, B, C };
public static class ConversionExtensions
{
public static string ConvertToString(this Letters letter)
{
if (letter == Letters.A) { return "A"; }
if (letter == Letters.B) { return "B"; }
if (letter == Letters.C) { return "C"; }
return "?";
}
public static Letters ConvertToLetter(this string s)
{
if (s == "A") { return Letters.A; }
if (s == "B") { return Letters.B; }
return Letters.C;
}
}
然后,您可以使用扩展方法进行转换:
// Declare a enum type object.
Letters firstLetter = Letters.A;
// Convert from enum to string.
string strLetter = firstLetter.ConvertToString();
// Convert back from string to enum.
Letters secondLetter = strLetter.ConvertToLetter();
希望对您有所帮助!
我想使用显式运算符转换逻辑从枚举转换为字符串。为什么我会收到“用户定义的转换必须转换为封闭类型或从封闭类型转换”?应该可以这样做,因为类型是封闭类型的子类型。
class ConversionDemo{
public enum Letters { A, B, C };
public String LetterName { get; }
public void DoWork(ConversionDemo.Letters letter) {
this.LetterName = (String)letter;
}
public static explicit operator String(ConversionDemo.Letters letter) {
if (letter == Letters.A) { return "A"; }
if (letter == Letters.B) { return "B"; }
if (letter == Letters.C) { return "C"; }
return "?";
}
public static explicit operator ConversionDemo.Letters(String s) {
if (s == "A") { return Letters.A; }
if (s == "B") { return Letters.B; }
return Letters.C;
}
}
"enclosing type" 是声明该方法的实际 class 或结构,不适用于任何 nested types。因此必须在 String
或 Letters
的定义中定义运算符。两者都不可能。
这个问题涉及类似的问题:explicit conversion operator error when converting generic lists。
您不能为枚举类型定义转换。您只能为 类 或结构定义它。看到这个 link.
因此,您需要的替代方法是更改转换并将其定义为扩展方法:
public enum Letters { A, B, C };
public static class ConversionExtensions
{
public static string ConvertToString(this Letters letter)
{
if (letter == Letters.A) { return "A"; }
if (letter == Letters.B) { return "B"; }
if (letter == Letters.C) { return "C"; }
return "?";
}
public static Letters ConvertToLetter(this string s)
{
if (s == "A") { return Letters.A; }
if (s == "B") { return Letters.B; }
return Letters.C;
}
}
然后,您可以使用扩展方法进行转换:
// Declare a enum type object.
Letters firstLetter = Letters.A;
// Convert from enum to string.
string strLetter = firstLetter.ConvertToString();
// Convert back from string to enum.
Letters secondLetter = strLetter.ConvertToLetter();
希望对您有所帮助!