zoukankan      html  css  js  c++  java
  • IsSpecialName特性及其他问题【转】

    请求两个c#问题,

    2012-05-14 18:39 提问者悬赏:100分 | 空城at | 分类:C#/.NET | 浏览98次
    问题1:
    enum Number//定义一个数字枚举
    {
    one,two,three,four
    }
    然后我将这个枚举Number转换为List
    IList<string> list = new List<string>();//一个IList列表
    Type type = typeof(Number);//得到Number的Type类型
    FieldInfo[] fi = type.GetFields();//得到枚举Number的所有字段信息
    foreach (FieldInfo f in fi)//遍历字段信息得到每个字段信息
    {
    ////////////////////////////--------------1------------///////////////////////////////
    list.Add(f.Name + " " + f.GetRawConstantValue().ToString());
    }
    就这样就老是输出value__ ….
    One…….
    Two……..
    Three………
    Four…….
    多了个value__,然后我在地方1加上
    if (f.IsSpecialName)
    {
    continue;
    }
    就没有value__了
    看IL代码会发现这个value__是叫 specialname,那这个specialname是干什么的呢?这不是闲着吗,多加个字段干嘛?

    问题2:
    FileStream fs = new FileStream("D:\\1.mp3", FileMode.Open, FileAccess.ReadWrite);//定义一个MP3的读写流
    byte[] b = new byte[10];
    int count = 0;
    while ((count = fs.Read(b, 0, b.Length)) != 0)
    {
    for (int i = 0; i < count; i++)
    {
    b[i] = (byte)(255 - b[i]);//简单加下密
    }
    fs.Position = fs.Position - count;
    fs.Write(b, 0, count);

    }
    fs.Dispose();
    运行一次,就加密了,再运行一次就解密了
    这是我写的MP3加密解密 ,请问用多线程咋实现呢,我老是没写出???????

    问题3
    使用集合初始化器初始化我自定义的一个类
    class Person:IEnumerable<object>
    {
    public int age;
    public string name;
    .........
    .............
    public void Add(object o)
    {
    if(o is int){ age = (int)o;}
    if(o is string){ name = o.ToString()}

    }
    main:
    Person p = new Person(){20,"tom"};
    现在是只有一个int,string我用上面的实现的,但是要是有几个int,string呢
    我是这么做的
    public static int i=0;
    public void Add(object o)
    {
    Type t = this.GetType();
    FieldInfo[] fis = t.GetFields();
    fis[i++].SetValue(this,(在这里怎么得到字段的类型进行强转呢????)o);
    咋实现呢??????????
    }

    }
    网友采纳
    2012-05-15 08:48
    1、遍历枚举除了你用的,也可以用这种方式
    foreach (string s in Enum.GetNames(type))
    list.Add(string.Format("{0} {1}", s, Enum.Format(type, Enum.Parse(type, s), "d")));

    2、将你这段代码写入一个void方法,比如private void EncryptMusic,然后
    Thread ck = new Thread(new ThreadStart(EncryptMusic));
    ck.IsBackground = true;//将线程作为后台线程处理,用途,当主线程关闭,子线程随着关闭
    ck.Start(); //启动
    while (ck.IsAlive) { Application.DoEvents(); } //等待完成
    追问
    第二个我是想不用FileAccess.ReadWrite,将其分开为2个流,read,write来用线程实现,怎么线程控制

    还有第三题,帮我看一下。谢谢了!
  • 相关阅读:
    图论-最短路
    windows对拍及其应用
    RMQ与st表
    树状数组
    二分和三分题
    [转载]图论500题
    浏览器请求背后的网络数据传输过程
    百度ocr文字识别接口使用
    Mysql启动报错解决方案:Failed to open log (file './mysql-bin.000901', errno 2)
    Mac环境下nginx https配置
  • 原文地址:https://www.cnblogs.com/zhouyunbaosujina/p/3121129.html
Copyright © 2011-2022 走看看