我在读虽然关于在计算器上不纯的方法问题,在这里,它让我想起了结构设计的最佳实践.
阅读有关创建不可变结构的示例,此处属性仅定义为getter.
public DateTime Start { get { return start; } }
public DateTime End { get { return end; } }
public bool HasValue { get { return hasValue; } }
Run Code Online (Sandbox Code Playgroud)
其他地方的其他示例包括System.Drawing.Point属性中的getter和setter.
public int Y {
get {
return y;
}
set {
y = value;
}
}
Run Code Online (Sandbox Code Playgroud)
该设计准则不指定,但他们都相当简洁.结构属性的推荐方法是什么?只读或允许写作?
我是一名新的程序员,我的新项目是制作一份排序日记.
我希望日志本身是一个列表,但每个新帖子都是一个新的数组,可以包含2个项目(标题和帖子).我应该补充一点,这是一个学校项目,所以我需要一个正确方向的颠簸.
我希望我能清楚地知道我想做什么,并提前感谢!
当我不知道元素的确切数量时,我有一个关于在C#中创建数组的问题.我发现了很多类似的问题,比如这个问题.建议使用List而不是Array.在那个例子和其他所有例子中,我看到它实例化了一个'字符串列表'.我可以用结构做同样的事情吗?
例如,我有以下用于存储故障信息的结构,但我不知道在测试开始时会发生多少次故障.它可能是0,可能是数百.
public struct EraseFailures
{
public string timestamp;
public string bus;
public string channel;
public string die;
public string block;
}
Run Code Online (Sandbox Code Playgroud)
那么我也可以创建这些列表吗?
List<EraseFailures> eFails = new List<EraseFailures>();
Run Code Online (Sandbox Code Playgroud)
它编译得很好,但我想确保这是最好的方法.如果是,将值添加到我的列表的语法是什么?因为以下似乎不正确......
eFails.bus.Add("bus0");
Run Code Online (Sandbox Code Playgroud)
好像我可能要创建一个包含我想要的值的新结构,然后将其添加到List中.
我倾向于使用结构的ArrayLists.然后用foreach循环遍历列表非常容易.
我遇到的问题是我不能使用foreach来修改结构内容,并且必须使用for和messy类型转换.
((dataStructure)files[x]).name = here;
Run Code Online (Sandbox Code Playgroud)
有更简洁的方法吗?
我有一个结构
struct myStruct {
Dictionary<string, int> a;
Dictionary<string, string> b;
......
}
Run Code Online (Sandbox Code Playgroud)
我想创建该结构的arraylist
ArrayList l = new ArrayList();
myStruct s;
s.a.Add("id",1);
s.b.Add("name","Tim");
l.Add(s);
Run Code Online (Sandbox Code Playgroud)
但是,我收到错误"对象引用未设置为对象的实例".
谁能告诉我为什么?
谢谢.
我对结构感到困惑.
class A
{
double a { get; set; }
MyStruct b { get; set; }
void Modify()
{
a = 1.0; // This compiles.
b.c = 2.0; // Assuming c is a double. This gives the known error.
}
}
Run Code Online (Sandbox Code Playgroud)
为什么我能够设置结构a的值,而不是结构的字段b?我读到的答案是我有一份b而不是b的支持字段.按照同样的逻辑,我必须有a的副本,而不是a,所以如何解释a属性在允许的分配后被更改
a = 1.0;
Run Code Online (Sandbox Code Playgroud)
?谢谢.
编辑:
另外为了仍然在A类中使用b,通过set和get方法"过滤"而不是直接使用支持字段_b,这可能是这样的:
MyStruct _b;
MyStruct b { get { return _b; } set { _b=value; } }
Run Code Online (Sandbox Code Playgroud)
然后使用该字段
_b
Run Code Online (Sandbox Code Playgroud)
正如在答案中正确陈述的那样,我想到了一个愚蠢的方法来将属性"包装"在一个大小为1的一维数组中.
MyStruct[] b { get; set; }
Run Code Online (Sandbox Code Playgroud)
用类包装结构.我不知道这个的计算成本,但我更喜欢直接使用A类中的字段.
回答:好的,当你习惯将属性解释为你脑海中的字段时,这个问题就会出现混乱.如果你以正确的方式解释属性 …
新手问题.我应该使用什么样的集合类型来存储这样的结构?
Files collection
---------------
FileId: Int
FileName : String
Path: String
Run Code Online (Sandbox Code Playgroud)
我需要将几个文件数据存储到该集合中,找到Path by FileId字段,通过FileId字段删除项目.
我有一个我为usercontrol特定创建的结构.我的想法是,我会有一个公共财产Guid Dictionary<string, Guid> Attachments,然后将其转换为我List<Attachment> attachments在设置者的私人财产.我很难做到这一点,最好是使用linq,但我愿意接受替代方案.谢谢...
private List<Attachment> attachments;
public struct Attachment
{
public Guid Id { get; set; }
public string Name { get; set; }
}
public Dictionary<string, Guid> Attachments
{
get { return attachments.ToDictionary(a => a.Name, a => a.Id); }
set { attachments = new List<Attachment> // not sure what to do here }
}
Run Code Online (Sandbox Code Playgroud) 假设我有一个对象列表,我正在从列表中提取和修改项目,如下所示:
List<MyObject> TheListOfObjects = new List<MyObject>();
MyObject TheObject = new MyObject();
TheListOfObjects = //some json deserialization result
TheObject = (from o in TheListOfObject
where o.ID == SomeParameter
select o).SingleOrDefault();
TheObject.SomeProperty = SomeValue;
Run Code Online (Sandbox Code Playgroud)
当我写作TheObject.SomeProperty = SomeValue;时,我:
public struct customerItemListStruct {
public int ID { get; set; }
public string name { get; set; }
public double rate { get; set; }
public int quantity { get; set; }
//public double total = rate * quantity;
Run Code Online (Sandbox Code Playgroud)
}
我想预先设定总值.
建议我最好的方法!谢谢!