小编bli*_*ins的帖子

将枚举值数组转换为位标志组合

如果这是一个愚蠢的问题或者只是一个无聊的问题,我会向前道歉.此外,我将通过实际找到答案来证明这一点.我对复杂性不满意(因为这很无聊:))

题:

如何在C#2.0中以最简单最优的方式从枚举值数组创建位标志组合

示例代码(不确定这是我们在这里可以做的最好的):

enum MyEnum
{
    Apple = 0,
    Apricot = 1,
    Breadfruit = 2,
    Banana = 4
}

private int ConvertToBitFlags(MyEnum[] flags)
{
    string strFlags = string.Empty;
    foreach (MyEnum f in flags)
    {
        strFlags += strFlags == string.Empty ?
            Enum.GetName(typeof(MyEnum), f) :
            "," + Enum.GetName(typeof(MyEnum), f);
    }
    return (int)Enum.Parse(typeof(MyEnum), strFlags);
}
Run Code Online (Sandbox Code Playgroud)

c# c#-2.0

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

两个坐标的相对基数方向

以下枚举定义如下:

public enum Direction
{
    North,
    South,
    East,
    West,
    Northeast,
    Northwest,
    Southeast,
    Southwest,
    Undefined
}
Run Code Online (Sandbox Code Playgroud)

给定二维空间中的两组坐标,我想确定从第2点到第1点的相对基数方向.

例子:

  • P1(1,1)和P2(0,1)返回Direction.North,因为P2是P1的北部
  • P1(1,1)和P2(5,4)返回Direction.Southeast
  • P1(1,1)和P2(1,1)返回Direction.Undefined

我目前的方法涉及一系列条件,即

if (P1.X == P2.X)
{
    // either North, South or Undefined
    if (P1.Y < P2.Y)
        return Direction.South;
    else if (P1.Y > P2.Y)
        return Direction.North,
    else
        return Direction.Undefined;
}
else if (P1.Y == P2.Y)
{
    ...
}
else 
{
    ...
}
Run Code Online (Sandbox Code Playgroud)

我正在寻求更短,更优雅的解决方案.

c# algorithm

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

为什么集合初始值设定项与 getter-only 属性一起使用?

对我来说,这是非常不可预测的代码结果。

没想到这段代码会产生这样的结果。

因此,我阅读了 Jeffrey Richter 的书(clr ia c#),并且有一个包含此代码的示例。

internal class ClassRoom
{
    private List<String> _students = new List<string>();
    public List<String> Students { get { return _students; } }
}

ClassRoom classRoom = new ClassRoom
{
    Students = {"Mike", "Johny", "Vlad", "Stas"}
};

foreach (var some in classRoom.Students)
{
    Console.WriteLine(some);
}
Run Code Online (Sandbox Code Playgroud)

而且,正如你们中的一些人所建议的,我们可以在控制台中看到四个名称。所以,我的问题是:

我们如何获得我们的名字,如果他们要分别在学生和 _students 中,由于不存在学生二传手而未分配。

__________编辑_1_______________

我阅读了您的回答,并感谢您的回答。

但是,你知道,这是一种误解……我真的想不通。

当我初始化学生时,我初始化_students

还有什么不那么重要,当我从 IEnumerable( some ) 中获取变量时,我从Students 中获取变量?我想不是。

我不明白,我到底在哪里分配变量(初始化)_students集合?

谢谢你帮我弄清楚!

c# clr properties getter-setter

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

即使属性已设置且有效,为什么 TryUpdateModel 仍返回 false?

我有基于 ASP.Net MVC3 的 Web 应用程序。我需要一个“创建”视图,在用户从下拉列表中选择要创建的子类型之前,该视图不会知道模型类型。为了尝试解决此问题,我在 Shared/EditorTemplates 下为每个派生模型类型创建了一个编辑器模板。这允许我创建一个对视图模型强类型的“Create.cs”。视图模型只有两个成员,一个枚举和一个复杂类型。这个想法是,视图最初仅显示一个下拉列表(枚举成员的编辑器),然后当用户最初提交指定的“模型类型”(下拉选择的值)时,POST 操作可以检查“模型类型” " 为视图模型的单个复杂成员指定并实例化正确的派生模型类型,该成员的类型是所有可能的“模型类型”的基本类型。

抽象+派生类型模型对象...

public abstract class MyModelBase
{
    public MyModelType_e ModelType {get; set; }
    [Required]
    public string Name { get; set; }
}

public class DerivedType1 : MyModelBase
{ ... }

public class DerivedType2 : MyModelBase
{ ... }

public class DerivedType3 : MyModelBase
{ ... }
Run Code Online (Sandbox Code Playgroud)

我有一个复杂的视图模型如下......

public enum MyModelType_e
{
    DerivedType1 = 0,
    DerivedType2 = 1,
    DerivedType3 = 2
}

public class MyModelCreate
{
    public MyModelType_e ModelTypeForSelectList { get; …
Run Code Online (Sandbox Code Playgroud)

c# asp.net entity-framework data-annotations asp.net-mvc-3

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