与此不重复.
我想让一个字符串有一个最大长度.它永远不会超过这个长度.让我们说20个字符长度.如果提供的字符串> 20,则取前20个字符串并丢弃其余字符串.
这个问题的答案显示了如何使用函数限制字符串,但我想在没有函数的情况下直接执行.我希望每次写入字符串时都会发生字符串长度检查.
下面是我并不想这样做:
string myString = "my long string";
myString = capString(myString, 20); //<-- Don't want to call a function each time
string capString(string strToCap, int strLen)
{
...
}
Run Code Online (Sandbox Code Playgroud)
我能用一个属性完成这个:
const int Max_Length = 20;
private string _userName;
public string userName
{
get { return _userName; }
set
{
_userName = string.IsNullOrEmpty(value) ? "" : value.Substring(0, Max_Length);
}
}
Run Code Online (Sandbox Code Playgroud)
然后我可以轻松地使用它,而不是调用函数来限制它:
userName = "Programmer";
Run Code Online (Sandbox Code Playgroud)
这个问题是每个string我想要上限必须为它们定义多个变量.在这种情况下,_userName和userName(属性)变量.
任何聪明的方法,不为每个字符串创建多个变量,同时,每次我想修改时都不必调用函数string …
在我的应用程序中,我希望所有存储金额的属性都舍入到n小数位.
为了清楚代码,我宁愿有一个自定义类型MoneyAmount,我所有相应的字段都有,而不必在所有属性getter/setter中放置一个`Math.Round(value,n)'.
有没有一种巧妙的方法来实现这一目标?
编辑:鉴于多个视图,我发布了我在此处派生的完整代码:
public struct MoneyAmount {
const int N = 4;
private readonly double _value;
public MoneyAmount(double value) {
_value = Math.Round(value, N);
}
#region mathematical operators
public static MoneyAmount operator +(MoneyAmount d1, MoneyAmount d2) {
return new MoneyAmount(d1._value + d2._value);
}
public static MoneyAmount operator -(MoneyAmount d1, MoneyAmount d2) {
return new MoneyAmount(d1._value - d2._value);
}
public static MoneyAmount operator *(MoneyAmount d1, MoneyAmount d2) {
return new …Run Code Online (Sandbox Code Playgroud) 可能重复:
在C#中重载赋值运算符
我记得我在堆栈溢出的某个地方看到了这个问题,但我找不到它.
基本上我希望能够做到:
MyClass myClass = 5;
Run Code Online (Sandbox Code Playgroud)
其中MyClass是我的程序实现的类.
如果我能找到那个副本,我会删除这个问题.
我有一个复杂的对象类型,我正在覆盖"base.ToString()"方法,以便它返回一个字符串属性值.
例如:
class foo
{
public string StringValue{get;set;}
public int SomeOtherValue{ get;set;}
public override ToString()
{
return StringValue;
}
}
Run Code Online (Sandbox Code Playgroud)
所以这允许我轻松地使用检索StringValue属性的值.
有没有办法可以覆盖或扩展基本功能,以便我可以使用如下的简单代码来设置StringValue属性?
foo aFoo = new foo();
aFoo = "Some string value";
Run Code Online (Sandbox Code Playgroud) 我想在C#中做这样的事情:
Foo test = "string";
Run Code Online (Sandbox Code Playgroud)
现在应该初始化对象.我怎样才能做到这一点?我不能让它工作,但我知道这是可能的.
如何通过赋值为类型提供初始化的能力,如下所示:
public struct WrappedByte
{
private byte m_value;
}
//Usage:
WrappedByte x = 0xFF;
Run Code Online (Sandbox Code Playgroud) 让我们说我有班级:
class Foo
{
public Foo(int value)
{
this.Value = value;
}
public int Value { get; private set; }
}
Run Code Online (Sandbox Code Playgroud)
我想做以下事情:
var f = new Foo(1);
f = 5; // How can I do this? In here I want to change => f.Value
var x = f.Value; // I will like x to equal to 5 in here
Run Code Online (Sandbox Code Playgroud)