相关疑难解决方法(0)

结构体可以包含引用类型的字段

结构体是否包含引用类型的字段?如果可以,这是一个不好的做法?

c# struct reference-type

53
推荐指数
4
解决办法
2万
查看次数

无需函数即可将字符串直接限制为一定长度

不重复.

我想让一个字符串有一个最大长度.它永远不会超过这个长度.让我们说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我想要上限必须为它们定义多个变量.在这种情况下,_userNameuserName(属性)变量.

任何聪明的方法,不为每个字符串创建多个变量,同时,每次我想修改时都不必调用函数string …

c# unity-game-engine

13
推荐指数
2
解决办法
527
查看次数

c#创建自定义"双"类型

在我的应用程序中,我希望所有存储金额的属性都舍入到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# double types rounding

4
推荐指数
1
解决办法
1290
查看次数

将数值赋值给类

可能重复:
在C#中重载赋值运算符

我记得我在堆栈溢出的某个地方看到了这个问题,但我找不到它.

基本上我希望能够做到:

MyClass myClass = 5;
Run Code Online (Sandbox Code Playgroud)

其中MyClass是我的程序实现的类.

如果我能找到那个副本,我会删除这个问题.

c#

3
推荐指数
1
解决办法
80
查看次数

是否可以在C#中覆盖赋值"="

我有一个复杂的对象类型,我正在覆盖"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#

3
推荐指数
3
解决办法
3136
查看次数

如何在不使用新的情况下进行直接分配?

我想在C#中做这样的事情:

Foo test = "string";
Run Code Online (Sandbox Code Playgroud)

现在应该初始化对象.我怎样才能做到这一点?我不能让它工作,但我知道这是可能的.

c# assign

2
推荐指数
1
解决办法
204
查看次数

按作业初始化对象?

如何通过赋值为类型提供初始化的能力,如下所示:

public struct WrappedByte
{
    private byte m_value;
}

//Usage:    
WrappedByte x = 0xFF;
Run Code Online (Sandbox Code Playgroud)

c# compiler-construction initialization variable-assignment

0
推荐指数
1
解决办法
84
查看次数

c#中的重载=运算符

让我们说我有班级:

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)

c# operator-overloading

0
推荐指数
1
解决办法
133
查看次数