我总是感到惊讶的是,即使在现在使用C#之后,我仍然设法找到我不知道的事情......
我试过在网上搜索这个,但在搜索中使用"〜"对我来说效果不好,我在MSDN上也找不到任何东西(不是说它不存在)
我最近看到了这段代码,代字号(〜)是什么意思?
/// <summary>
/// Enumerates the ways a customer may purchase goods.
/// </summary>
[Flags]
public enum PurchaseMethod
{
All = ~0,
None = 0,
Cash = 1,
Check = 2,
CreditCard = 4
}
Run Code Online (Sandbox Code Playgroud)
我看到它有点惊讶所以我试图编译它,它有效...但我仍然不知道它意味着什么/做了什么.任何帮助?
如果我有一个带有原始Integer值的枚举:
enum City: Int {
case Melbourne = 1, Chelyabinsk, Bursa
}
let city = City.Melbourne
Run Code Online (Sandbox Code Playgroud)
如何将city值转换为字符串Melbourne?这种类型的名称内省是否可用于该语言?
像(这段代码不起作用):
println("Your city is \(city.magicFunction)")
> Your city is Melbourne
Run Code Online (Sandbox Code Playgroud) 在Java中,可以在枚举中包含方法.
在C#中是否存在这样的可能性,或者它只是一个字符串集合而且就是这样吗?
我试图覆盖ToString()但它不编译.有人有简单的代码示例吗?
我的一位同事表示,布尔作为方法论据是不可接受的.它们应由枚举代替.起初我没有看到任何好处,但他给了我一个例子.
什么更容易理解?
file.writeData( data, true );
Run Code Online (Sandbox Code Playgroud)
要么
enum WriteMode {
Append,
Overwrite
};
file.writeData( data, Append );
Run Code Online (Sandbox Code Playgroud)
现在我明白了!;-)
这绝对是一个例子,枚举作为第二个参数使代码更具可读性.
那么,您对此主题有何看法?
这两个接口之间的确切区别是什么?是否Enumeration有过使用效益Iterator?如果有人可以详细说明,那么参考文章将不胜感激.
我想声明一个枚举方向,它有一个方法返回相反的方向(下面的语法不正确,即枚举不能实例化,但它说明了我的观点).这在Java中可行吗?
这是代码:
public enum Direction {
NORTH(1),
SOUTH(-1),
EAST(-2),
WEST(2);
Direction(int code){
this.code=code;
}
protected int code;
public int getCode() {
return this.code;
}
static Direction getOppositeDirection(Direction d){
return new Direction(d.getCode() * -1);
}
}
Run Code Online (Sandbox Code Playgroud) 我想查看.net框架中是否存在数月的官方枚举.
我觉得有一个,因为月份的使用有多常见,并且因为.net框架中还有其他这样的枚举.
例如,有一个星期几的枚举,System.DayOfWeek,包括星期一,星期二等.
我想知道一年中是否有一个月,即1月,2月等?
有人知道吗?
当我有类似的东西时,我想到了这个问题
enum Folders {FA, FB, FC};
Run Code Online (Sandbox Code Playgroud)
并希望为每个文件夹创建一个容器数组:
ContainerClass*m_containers[3];
....
m_containers[FA] = ...; // etc.
Run Code Online (Sandbox Code Playgroud)
(使用的地图是更优雅的使用方法:std::map<Folders, ContainerClass*> m_containers;)
但回到我原来的问题:如果我不想对数组大小进行硬编码,有什么方法可以找出文件夹中有多少项?(不依赖于例如FC列表中的最后一项,ContainerClass*m_containers[FC+1]如果我没有弄错的话就会允许这样的事情.)
我最近一直在使用enumerateObjectsUsingBlock:很多我的快速枚举需求,而且我很难理解BOOL *stop枚举块中的用法.
在NSArray类引用状态
stop:对布尔值的引用.该块可以将值设置YES为停止进一步处理数组.这个stop论点是一个唯一的论点.您应该只将此布尔值设置YES为块内.
那么当然我可以在我的块中添加以下内容来停止枚举:
if (idx == [myArray indexOfObject:[myArray lastObject]]) {
*stop = YES;
}
Run Code Online (Sandbox Code Playgroud)
从我能够说的,没有明确设置*stop到YES没有任何负面的副作用.枚举似乎在数组的末尾自动停止.那么*stop在一个区块中使用真的有必要吗?
cocoa-touch enumeration objective-c nsarray fast-enumeration
我有一个经典的例子,试图从一个集合中删除一个项目,同时在循环中枚举它:
List<int> myIntCollection = new List<int>();
myIntCollection.Add(42);
myIntCollection.Add(12);
myIntCollection.Add(96);
myIntCollection.Add(25);
foreach (int i in myIntCollection)
{
if (i == 42)
myIntCollection.Remove(96); // The error is here.
if (i == 25)
myIntCollection.Remove(42); // The error is here.
}
Run Code Online (Sandbox Code Playgroud)
在发生更改后的迭代开始时,InvalidOperationException会抛出一个,因为枚举器在底层集合发生更改时不喜欢.
我需要在迭代时对集合进行更改.有许多模式可用于避免这种情况,但它们似乎都没有一个好的解决方案:
不要在此循环内删除,而是保留一个单独的"删除列表",在主循环后处理.
这通常是一个很好的解决方案,但在我的情况下,我需要项目立即消失为"等待"直到主循环后真正删除项目更改我的代码的逻辑流程.
只需在项目上设置一个标志并将其标记为非活动状态,而不是删除该项目.然后添加模式1的功能以清理列表.
这会工作为我所有的需求,但它意味着一个很大的代码将在开始按每一个项目被访问时检查不活动的标志改变.根据我的喜好,这是太多的管理.
以某种方式将模式2的思想融入到源自的类中List<T>.此超级列表将处理非活动标志,事后删除对象,也不会将标记为非活动的项目暴露给枚举使用者.基本上,它只是封装了模式2(以及随后的模式1)的所有想法.
这样的课程存在吗?有没有人有这个代码?或者,还有更好的方法?
我被告知访问myIntCollection.ToArray()而不是myIntCollection将解决问题,并允许我在循环内删除.
这对我来说似乎是一个糟糕的设计模式,或者它可能没问题?
细节:
该列表将包含许多项目,我将只删除其中的一些项目.
在循环内部,我将执行各种过程,添加,删除等,因此解决方案需要相当通用.
我需要删除的项目可能不是循环中的当前项目.例如,我可能在30项循环的项目10上并且需要移除项目6或项目26.因此,向后穿过阵列将不再起作用.O(
enumeration ×10
c# ×4
enums ×3
java ×2
.net ×1
boolean ×1
c++ ×1
cocoa-touch ×1
coding-style ×1
collections ×1
count ×1
datetime ×1
foreach ×1
iterator ×1
list ×1
nsarray ×1
objective-c ×1
swift ×1