Saturday, November 19, 2011

csharp 语法

Collection 泛型类 数组元元修改可通知

ObservableCollection(Of T) 类 表示一个动态数据集合,在添加项、移除项或刷新整个列表时,此集合将提供通知。

OperationBase.RaisePropertyChanged 方法

protected void RaisePropertyChanged ( string propertyName )

 

C#中静态成员可以保证是线程安全的?

返回byte[]: var carriageReturnBytes = encoding.GetBytes(new[] { 'r', 'n' });

 

某lamba示例:Answers.Where(a => a.QuestionText == "Voice Question").Single().QuestionType

创建一个IEnumerable<SurveyTemplate>对象: new[] { new SurveyTemplate() };

返回一个IObservable<IEnumerable<xxx>>对象: IEnumerable<xxx>.ToObservable()

 

测试中

using Microsoft.Silverlight.Testing;
using Microsoft.VisualStudio.TestTools.UnitTesting;

 

[TestClass]

[TestMethod]

方法

 

查询对象的成员:

static public Byte[] StructToBytes(Object obj)
        {
            List<pair> hs = new List<pair>();
            int count = 0;
 
            foreach (FieldInfo fi in obj.GetType().GetFields(BindingFlags.Public | BindingFlags.Instance))
            {
                if (ts.Keys.Contains(fi.FieldType))
                {
                    pair temp = tg[fi.FieldType](fi, obj);
                    //if (temp.isarray)//byte[] 要用一个UInt16的整数来记录数组的长度
                    //{
                    //    count += 2;
                    //}
                    count += temp.data.Length;
                    hs.Add(temp);
                }

            }

动态根据类型创建实例:

static int SetStructBytes(FieldInfo fi, Object o, byte[] data, int offset)
        {
            Type t = fi.FieldType;
            object o2 = Activator.CreateInstance(t);
            int ret = BytesToStruct(data, o2, offset) - offset;
           
            fi.SetValue(o2, t);

            return ret;
        }

 

?号,来源

在C# 中有个较为重要,而常被一些人忽视的符号—— 问号(? )。在这里整理一下它在C# 的几种情况:

1. 可空类型修饰符“T?” : 可空类型的基础类型可以是任何非可空值类型或任何具有struct 约束的类型参数,但不能是可空类型或引用类型。例如:int? 代表是可空的整形,而int?? 则是无效类型。即可空类型可以表示其基础类型的所有值和一个额外的空值。语法T? 是System.Nullable<T> 的缩写形式。可空类型具有一个HasValue 的bool 类型只读属性,当可空类型实例的该属性为true 时,则表示该实例是非空实例,包含一个已知值Value;HasValue 为false 时,访问Value 属性将导致System.InvalidOperationException 。可空类型T? 具有一个类型为T 的单个参数的公共构造函数,如new int?(123) 将获得一个值为123 的int? 类型实例。从T? 到由T 实现的任何接口都存在装箱转换,并且从由T 实现的任何接口都存在到T? 的拆箱转换。但是任何情况下可空类型都不满足接口约束,即使基础类型实现了该特定接口。

2. 条件运算符“x ? y : z” : “x ? y : z” 的意思大部分程序员应该都熟悉,稍微啰嗦一下:) 如果表达式x 为true ,则计算y ;如果x 为false ,则计算z 。省却if{}else{} 的简单形式了。

3. 空合并运算符“??” : 该运算符是在泛型出现后,C# 词法语法中新增加的标记,同时出现的还有一个“::” (命名空间别名限定符)。形式为“a??b” 的空合并表达式要求a 为可空类型或引用类型 。如果a 为非空则表达式“a??b” 返回的结果为a ;否则返回b 。空合并运算符为 结合运算符 ,即操作时从右向左进行组合的。如,“a??b??c” 的形式按“a??(bb??cc)” 计算。

 

常见问题

问题: 错误 CS0234: 命名空间“Microsoft”中不存在类型或命名空间名称“Silverlight”。是否缺少程序集引用?

解决:

phone7平台:C:Program FilesMicrosoft SDKsSilverlightv3.0ToolkitNov09Bin

新错误:

C:WindowsMicrosoft.NETFrameworkv4.0.30319Microsoft.Common.targets(1490,5): warning MSB3268: 未能解析主引用“Microsoft.Silverlight.Testing, Version=2.0.5.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL”,因为它对框架程序集“System.Windows.Browser, Version=2.0.5.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e”有间接依赖关系,而在当前目标框架中未能解析该程序集。“Silverlight,Version=v4.0,Profile=WindowsPhone71”。若要解决此问题,请移除引用“Microsoft.Silverlight.Testing, Version=2.0.5.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL”,或将应用程序的目标重新指向包含“System.Windows.Browser, Version=2.0.5.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e”的框架版本。

 

silverlight4平台:C:Program FilesMicrosoft SDKsSilverlightv4.0ToolkitApr10Testing

新错误:

Could not load type 'Microsoft.Silverlight.Testing.UnitTestSettings' from assembly 'Microsoft.Silverlight.Testing, Version=2.0.5.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35'.

No comments: