如何确定类型成员是否为枚举?

时间:2016-04-22 16:25:56

标签: c# .net reflection enums

我发现我可以使用GetMembers()来返回类的成员,但我想只返回枚举成员。在进行调试时,我可以将鼠标悬停在member上,然后查看IsEnum true属性,但我似乎无法通过代码访问它。

我希望只在以下代码中打印IAmAnEnum。目前,代码将同时打印IAmAnEnum以及IAmAClass

static void Main(string[] args)
{
    foreach (var member in typeof(Test).GetMembers())
    {
        //if (member.IsEnum) // <-- Compile error
        //{
        Console.WriteLine(member.Name);
        //}
    }

    Console.Read();
}

public class Test
{
    public enum IAmAnEnum
    {

    }

    public class IAmAClass
    {

    }
}

2 个答案:

答案 0 :(得分:2)

package crypto; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import java.io.UnsupportedEncodingException; import java.security.InvalidAlgorithmParameterException; import java.security.InvalidKeyException; import java.security.NoSuchAlgorithmException; import javax.crypto.*; import javax.crypto.spec.IvParameterSpec; import javax.crypto.spec.SecretKeySpec; public class MyCrypto { SecretKeySpec key; Cipher cipher; byte[] iv = {0,0,0,0,0,0,0,0}; IvParameterSpec ivspec = new IvParameterSpec(iv); MyCrypto() throws NoSuchAlgorithmException, NoSuchPaddingException, UnsupportedEncodingException { key =new SecretKeySpec("22042016".getBytes(), "DES"); cipher = Cipher.getInstance("DES/CBC/PKCS5Padding"); } public void encrypt(File file) throws InvalidKeyException, IOException { cipher.init(Cipher.ENCRYPT_MODE, key); FileInputStream fis = new FileInputStream(file); FileOutputStream fos = new FileOutputStream(file); CipherOutputStream cos = new CipherOutputStream(fos, cipher); byte[] block = new byte[8]; int i; while ((i = fis.read(block)) != -1) { cos.write(block, 0, i); } cos.close(); fis.close(); } public void decrypt(File file) throws IOException, InvalidKeyException, InvalidAlgorithmParameterException { cipher.init(Cipher.DECRYPT_MODE, key, ivspec); FileInputStream fis = new FileInputStream(file); CipherInputStream cis = new CipherInputStream(fis, cipher); FileOutputStream fos = new FileOutputStream(file); byte[] block = new byte[8]; int i; while ((i = cis.read(block)) != -1) { fos.write(block, 0, i); } cis.close(); fos.close(); } public static void main(String[] args) throws NoSuchAlgorithmException, NoSuchPaddingException, InvalidKeyException, IOException, InvalidAlgorithmParameterException { MyCrypto crypto = new MyCrypto(); File cryptoFile = new File(".../crypto.txt"); crypto.encrypt(cryptoFile); crypto.decrypt(cryptoFile); } } IsEnum的属性。

如果该成员实际上是一个类型,您可以将其强制转换为Type并获取该属性。

答案 1 :(得分:0)

Type上的GetMembers方法返回一个MemberInfo对象数组。 在每个上面,您都有一个 MemberType 属性。 使用此选项可获取成员的类型。 在成员的类型上,您可以自由使用IsEnum检查。

快乐的编码! :)