C# 如何将类的对象作为字符串运算符分配给变量?
我有一个具有属性的类 比如说C# 如何将类的对象作为字符串运算符分配给变量?,c#,string,class,operators,overloading,C#,String,Class,Operators,Overloading,我有一个具有属性的类 比如说 class Caption { public string AR{get;set;} public string EN{get;set;} pbulic string Tu{get;set;} } 例如,我想直接将标题对象分配给VARABLE,而不需要调用属性 我想用这个 Caption caption=new Caption(); string myVar = caption; // this will return EN pro
class Caption
{
public string AR{get;set;}
public string EN{get;set;}
pbulic string Tu{get;set;}
}
例如,我想直接将标题对象分配给VARABLE,而不需要调用属性
我想用这个
Caption caption=new Caption();
string myVar = caption; // this will return EN property directly
而不是
string myVar = caption.En;
我不知道,但我认为目标类本身有重载字符串运算符或其他东西
为什么我需要这个?只是为了本地化的目的和本地化对象的可读性。
而是每次创建
开关(语言)
时,分配caption.EN
,caption.AR
。这将很难看。最干净的方法可能是实现索引器。这样,您就可以在标题
类中一次性切换,对语言进行任何检查
,处理问题,处理默认值等,而无需调用方法,如下所示:
class Caption
{
public string AR { get; set; }
public string EN { get; set; }
public string Tu { get; set; }
// var cap = new Caption()[language];
public string this[string language]
{
get
{
var which = AR;
switch(language)
{
case nameof(EN):
which = EN;
break;
case nameof(Tu):
which = Tu;
break;
}
return which;
}
}
}
请注意,可以实现所需的语法,您可以将
标题
隐式转换为字符串
。需要注意的是,在进行转换之前,您需要了解语言
您可以通过提供一个在创建时处理它的构造函数和/或一个方法(如果您愿意,可以使用链)来实现这一点,就像我下面使用For
所做的那样:
class Caption
{
public string AR { get; set; }
public string EN { get; set; }
public string Tu { get; set; }
// Gets the caption of the current language
public string Current { get; private set; }
// If the language is known in advance, you can return
// the desired language directly.
public static implicit operator string(Caption caption)
=> caption.Current;
public Caption For(string language)
{
var which = AR;
switch (language)
{
case nameof(EN):
which = EN;
break;
case nameof(Tu):
which = Tu;
break;
}
Current = which;
return this;
}
}
// Usage
var cap = new Caption
{
AR = "Test-ar",
EN = "Test-en",
Tu = "Test-tu"
}.For("EN");
string s = cap;
Console.WriteLine(s); // Test-en
您可以添加一个接受例如CultureInfo
参数的构造函数。重写ToString()
,以使用构造函数中指定的语言返回标题。您可以将与特定区域性中的文本对应的所有字符串存储在字典中,而不必为每个区域性使用公共属性。从JSON文件加载也更容易。您可以覆盖Caption类中的ToString()方法,但随后必须说string myVar=Caption.ToString()才能访问它。让我理解一下-索引器比GetLanguageString(string strLanguage)类中的方法有什么好处“这与索引器具有相同的方法体。@Rakesh,方便是主要的好处,但如果您愿意,当然一个方法也可以工作得很好。”。基于他们希望尽可能直接地获取值,我宁愿做caption[lang]
而不是caption.GetLanguageString(lang)
。明白了,我自己从来没有使用过索引器,所以我想知道是否有更多的索引。这正是我需要的。首领那就是让一个类用作字符串!这就是我需要的,谢谢。@devmuhammadkamal,很高兴它帮助了你。我更新了答案,添加了一点关于隐式转换的内容;它可能适用于您的情况,并且正是您想要的:)