小编Pat*_*ick的帖子

C#中的方法链接

我实际上不知道在C#中调用了什么.但是我想在我的类中添加functionallity以同时添加多个项目.

myObj.AddItem(mItem).AddItem(mItem2).AddItem(mItem3);
Run Code Online (Sandbox Code Playgroud)

c#

65
推荐指数
6
解决办法
5万
查看次数

资源文件中的C#属性文本?

我有一个属性,我想从资源文件加载文本到属性.

[IntegerValidation(1, 70, ErrorMessage = Data.Messages.Speed)]
private int i_Speed;
Run Code Online (Sandbox Code Playgroud)

但我不断得到"属性参数必须是属性参数类型的常量表达式,typeof表达式或数组创建表达式"

如果我添加一个字符串而不是Data.Messages.Text,它可以很好地工作,如:

[IntegerValidation(1, 70, ErrorMessage = "Invalid max speed")]
Run Code Online (Sandbox Code Playgroud)

有任何想法吗?

c# resources attributes

29
推荐指数
3
解决办法
2万
查看次数

没有从GetType()获取字段.使用BindingFlag.Default获取GetFields

我正在使用Reflection类来获取某个对象中的所有字段.然而,我的问题是,当字段在普通类中时,它可以正常工作,例如:

class test
{
   string test1 = string.Empty;
   string test2 = string.Empty;
}
Run Code Online (Sandbox Code Playgroud)

在这里我得到test1和test2,我的问题是我使用抽象,因此结合了几个类.

我有类似的东西:

class test3 : test2
{
   string test4 = string.Empty;
   string test5 = string.Empty;
}

class test2 : test1
{
   string test2 = string.Empty;
   string test3 = string.Empty;
}
class test1
{
   string test0 = string.Empty;
   string test1 = string.Empty;
}
Run Code Online (Sandbox Code Playgroud)

但是,当我运行它时,我不会从中获取字段GetType().GetFields(BindingFlag.Default).

这些领域的每个人都有get; set;附属于它的财产.当我运行代码时,我将属性一直返回到test1但不是实际的字段.

这是我试图获取字段的代码:

FieldInfo[] fields = Obj.GetType().GetFields(BindingFlags.Default);
foreach (FieldInfo field in fields)
Run Code Online (Sandbox Code Playgroud)

我也尝试过:

FieldInfo[] fields = Obj.GetType().GetFields(BindingFlags.Public 
                                             | BindingFlags.Instance 
                                             | …
Run Code Online (Sandbox Code Playgroud)

c# reflection bindingflags

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

C#多个通用约束

我想知道是否可以添加多个通用约束?

我有一个Add方法,它接受一个Object(电子邮件,电话或地址),所以我想的是:

public void Add<T>(T Obj) 
    where T : Address
    where T : Email
    where T : Phone
{
    if (Obj is Address)
        m_Address.Add(Obj as Address);
    else if (Obj is Email)
        m_Email.Add(Obj as Email);
    else
        m_Phone.Add(Obj as Phone);
}
Run Code Online (Sandbox Code Playgroud)

但我一直在:

"A constraint clause has already been specified for type parameter 'T'. All of the constraints for a type parameter must be specified in a single where clause."

c# generics constraints

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

一些C#命名约定问题

1)声明变量的政策是什么?你应该总是使用关键字private,还是可以跳过它?

string MyVar1;
Run Code Online (Sandbox Code Playgroud)

private string MyVar1;
Run Code Online (Sandbox Code Playgroud)

我看到的唯一原因是Microsoft有一天可以更改默认访问修饰符public而不是private.

在哪里说私人是可选的?对MSDN的任何引用?

2)常量的命名策略?

在写一个常量时我总是使用大写字母,但是一位朋友告诉我这违反了微软的命名政策,是吗?

const string MYVAR1;
Run Code Online (Sandbox Code Playgroud)

VS

const string myVar1;
Run Code Online (Sandbox Code Playgroud)

3)Pascal还是Camel?

我个人认为骆驼看起来很丑陋.

c# variables private constants naming-conventions

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

XML序列化是否需要属性进行读/写?

我在班上测试XML序列化,但我注意到在运行程序时ID号没有保存.

所以我环顾四周并修改了一些东西,但没有任何效果,然后我看到除了ID之外的所有字段都有get和set属性.所以我添加了一套; 财产到我的身份证号码和工作的poof.问题是,是否必须设定; 得到; 在我的所有属性上运行XML序列化是否有效?

我不希望在创建对象(自动生成)后修改ID号.

c# properties xml-serialization

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

C#堆栈溢出

我试图找出为什么我得到堆栈溢出异常.我正在为学校作业创建一个简单的纸牌游戏,当我克隆卡片以返回它们时,我得到了堆栈溢出异常.

所以我得到了这个卡类:

public class Card : ICloneable
{
    ....

    #region ICloneable Members

    public object Clone()
    {
        return this.Clone(); // <--- here is the error thrown when the first card is to be cloned
    }

    #endregion
}
Run Code Online (Sandbox Code Playgroud)

我有一个叫做Hand克隆的课程:

internal class Hand
{
        internal List<Card> GetCards()
        {
            return m_Cards.CloneList<Card>(); // m_Cards is a List with card objects
        }
}
Run Code Online (Sandbox Code Playgroud)

最后,我得到了一个扩展方法List:

    public static List<T> CloneList<T>(this List<T> listToClone) where T : ICloneable
    {
        return listToClone.Select(item => (T)item.Clone()).ToList();
    }
Run Code Online (Sandbox Code Playgroud)

错误被卡类(IClonable方法)抛出,

CardLibrary.dll中发生了未处理的"System.StackOverflowException"类型异常

c# stack-overflow icloneable

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