C#中枚举如何创建方法

皖西木子 2010-08-17 03:48:30
如何在枚举定义中定义自己的方法?
...全文
423 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
皖西木子 2010-08-23
  • 打赏
  • 举报
回复
不声明默认为int型
Passing方法返回的是bool型,可以看一下该方法实现
在在.net 3.5版里测试了一下,wuyq11和LAIER903的方法是可行的,因此推测,在.NEt2.0下是不支持
扩展方法的。
LAIER903 2010-08-18
  • 打赏
  • 举报
回复
可以使用扩展方法添加特定于某个特定枚举类型的功能。

示例
--------------------------------------------------------------------------------

在下面的示例中,Grades 枚举表示学生可能在班里收到的字母等级分。该示例将一个名为 Passing 的扩展方法添加到 Grades 类型中,以便该类型的每个实例现在都“知道”它是否表示合格的等级分。

using System;
using System.Collections.Generic;
using System.Text;
using System.Linq;

namespace EnumExtension
{
// Define an extension method in a non-nested static class.
public static class Extensions
{
public static Grades minPassing = Grades.D;
public static bool Passing(this Grades grade)
{
return grade >= minPassing;
}
}

public enum Grades { F = 0, D=1, C=2, B=3, A=4 };
class Program
{
static void Main(string[] args)
{
Grades g1 = Grades.D;
Grades g2 = Grades.F;
Console.WriteLine("First {0} a passing grade.", g1.Passing() ? "is" : "is not");
Console.WriteLine("Second {0} a passing grade.", g2.Passing() ? "is" : "is not");

Extensions.minPassing = Grades.C;
Console.WriteLine("\r\nRaising the bar!\r\n");
Console.WriteLine("First {0} a passing grade.", g1.Passing() ? "is" : "is not");
Console.WriteLine("Second {0} a passing grade.", g2.Passing() ? "is" : "is not");
}
}
}
}
/* Output:
First is a passing grade.
Second is not a passing grade.

Raising the bar!

First is not a passing grade.
Second is not a passing grade.
*/
lantianwangzhao 2010-08-18
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 laier903 的回复:]
可以使用扩展方法添加特定于某个特定枚举类型的功能。

示例
--------------------------------------------------------------------------------

在下面的示例中,Grades 枚举表示学生可能在班里收到的字母等级分。该示例将一个名为 Passing 的扩展方法添加到 Grades 类型中,以便该类型的每个实例现……
[/Quote]
通俗易懂!支持
边城的刀声 2010-08-18
  • 打赏
  • 举报
回复
如果是.net 2.0的话,你可以定义些attributes,然后再通过些helper来反射特定attribute
songtaixin 2010-08-18
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 laier903 的回复:]
可以使用扩展方法添加特定于某个特定枚举类型的功能。

示例
--------------------------------------------------------------------------------

在下面的示例中,Grades 枚举表示学生可能在班里收到的字母等级分。该示例将一个名为 Passing 的扩展方法添加到 Grades 类型中,以便该类型的每个实例现……
[/Quote]
支持一下!!!!
xiaoyi_nuo 2010-08-18
  • 打赏
  • 举报
回复
和在类里写是一样一样滴~~~~
wheelsmanlyd 2010-08-18
  • 打赏
  • 举报
回复
初学问几个低级问题
public enum Grades { F = 0, D=1, C=2, B=3, A=4 };
这个枚举的声明好像没按C#语法,Grades后面是不是还应该再说明一下是什么类型

Console.WriteLine("First {0} a passing grade.", g1.Passing() ? "is" : "is not");
C#不是放弃了C与C++中的0与非0表示逻辑真与逻辑假了吗?这句就是用0与非0来判断的
皖西木子 2010-08-18
  • 打赏
  • 举报
回复
.net 2.0 中的,我测试了下wuyq11和LAIER903的方法似乎不支持,还有别的方法么?
wuyq11 2010-08-17
  • 打赏
  • 举报
回复
Extension Method
enum enumType { a, b, c }
static class Test
{
public static void fun(this enumType e)
{
Console.WriteLine(e.ToString());
}
}
zhang1struts1yun 2010-08-17
  • 打赏
  • 举报
回复
枚举是轻量级结构类,跟类里面写方法是一个道理

110,538

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧