今天安装 Team Foundation Server。
在安装结果信息中有点以为的收获:
信息
启动 Windows 服务时允许花费的时间已从 30 秒增加为 600 秒。这会影响此服务器上的所有 Windows 服务。(注册表值设置是 HKLM\SYSTEM\CurrentControlSet\Control\!ServicesPipeTimeout。)
通过设置此注册表键值,调整加载服务所允许使用的时间。
希望世间永无欺骗
今天安装 Team Foundation Server。
在安装结果信息中有点以为的收获:
信息
启动 Windows 服务时允许花费的时间已从 30 秒增加为 600 秒。这会影响此服务器上的所有 Windows 服务。(注册表值设置是 HKLM\SYSTEM\CurrentControlSet\Control\!ServicesPipeTimeout。)
通过设置此注册表键值,调整加载服务所允许使用的时间。
1. 可空类型修饰符(?):
引用类型可以使用空引用表示一个不存在的值,而值类型通常不能表示为空。 例如: string str=null;是正确的。 int i=null;编译器将报错。 为了使值类型也可为空,可空类型出现了,可空类型使用可空类型修饰符?来表示,表现形式为T?。 例:int?表示是可空的整形,DateTime?表示为可空的时间。 T?其实是System.Nullable<T>(泛型结构)的缩写形式,也就意味着当你用到T?时编译器在编译时会把T?编译成System.Nullable<T>的形式, 例如:int?,编译后便是System.Nullable<int>的形式。
2. 三元(运算符)表达式(?:):
语法为:条件表达式?表达式1:表达式2; 该操作首先求出条件表达式的值(bool类型),为true时调用表达式1,为flase时调用表达式2。 其逻辑为:"如果为真执行第一个,否则执行第二个。" 例: test ? expression1 : expression2 test 任何 Boolean 表达式。 expression1 test 为 true 时返回的表达式。可能是逗点表达式。 expression2 test 为 false 时返回的表达式。可能是逗点表达式。 例如: string prm1="4"; string prm2="5"; string prm3 = prm1==prm2?"yes":"no" // 此时prm3值为"no".
3. 空合并运算符(??):
空合并运算符 (null coalescing operator) ?? 用于定义可空类型和引用类型的默认值。如果此运算符的左操作数不为 null,则此运算符将返回左操作数;否则返回右操作数。 例:a??b 如果 a 为非空,则 a ?? b 的结果为 a;否则结果为 b 。 空合并运算符为右结合运算符,即操作时从右向左进行组合的。 例:“a??b??c”的形式按“a??(b??c)”计算。
做了一天有关于JSON的工作,解析为JSON难度到不大,用.Net中微软自己的方法也很好用。
多层次泛型复杂对象(不是简单的 List<T> 而是 List<<List<T>>>)到数据实体对象,花了大半天时间从下午到晚上,一直研究到快凌晨。。。
最后还是放弃微软的方法。使用了 Json.NET 的 Newtonsoft.Json.dll 来反序列化。
随便推荐一个网站: 在线JSON校验格式化工具(K JSON) – json解析,json格式化,json 在线校验 http://www.kjson.com/
可以把要反解析的json放进去效验一下,避免错误格式,比如我今天遇到几次收到的 json 压根就是格式不正确的json … 非常耽误时间
下面给个例子供参考:
( 例子是在Handler1.ashx中做的,首先引用 “using Newtonsoft.Json;”)
using System; using System.Collections.Generic; using System.Web; using System.IO; using Newtonsoft.Json; namespace WebApp1 { /// <summary> /// Handler1 的摘要说明 /// </summary> public class Handler1 : IHttpHandler { public void ProcessRequest(HttpContext context) { string strJson = @"{ 'success': true, 'Object': { 'ID': -1, 'MoveID': 'D09-242', 'EX_Unit': 00, 'In_Unit': 00, 'Remark': 'OK', 'Detail': [ { 'ID': 1, 'M_ID': null, 'DVID': '11', 'DVName': 'aa0', 'DVType': null }, { 'ID': 2, 'M_ID': null, 'DVID': '22', 'DVName': 'aa1', 'DVType': null }, { 'ID': 3, 'M_ID': null, 'DVID': '33', 'DVName': 'aa2', 'DVType': null } ] }, 'msg': '成功' }"; ///大{}内 JSONObject 数据, 最外层 JSONObject<MoveInfo<MoveDetailInfo>> obj = Newtonsoft.Json.JsonConvert.DeserializeObject<JSONObject<MoveInfo<MoveDetailInfo>>>(strJson); string msg = obj.msg; string success = obj.success.ToString(); ///'Object'是实体对象类"MoveInfo"的实体类的数据 MoveInfo<MoveDetailInfo> info = obj.Object; int Mv_id1 = info.ID; //可以直接赋值给MoveInfo的对象获取到值 int Mv_id2 = obj.Object.ID; //还可以用上层的Object.ID获取到值 ///info.Detail 或 obj.Object.Detail 都是实体对象类"MoveDetailInfo"的实体类的数据 string DVName1 = ""; string DVName2 = ""; string DVName3 = ""; DVName1 = obj.Object.Detail[0].DVName; //方法1: 从最上次对象实体中取子属性 foreach(MoveDetailInfo mvinfo in info.Detail) DVName2 += mvinfo.DVName; //方法2: 迭代上层 info.Detail 对象"MoveDetailInfo"获取属性 MoveDetailInfo dvinfo = info.Detail[0]; DVName3 = dvinfo.DVName; //方法3: 再赋值给MoveDetailInfo对象类后获取 context.Response.ContentType = "text/plain"; context.Response.Write(string.Format("0;{0}\r1:{1};\r2:{2};", DVName1, DVName2, DVName3)); } public bool IsReusable { get { return false; } } } public class JSONObject<T> { private bool _success; /// <summary> /// 是否成功 /// </summary> public bool success { get { return _success; } set { _success = value; } } private T _Object; /// <summary> /// 业务实体对象 /// </summary> public T Object { get { return _Object; } set { _Object = value; } } private string _msg; /// <summary> /// 消息 /// </summary> public string msg { get { return _msg; } set { _msg = value; } } } /// <summary> /// MoveInfo 调拨单 /// </summary> public class MoveInfo<T> { private int _ID; public int ID { get { return _ID; } set { _ID = value; } } private string _MoveID; public string MoveID { get { return _MoveID; } set { _MoveID = value; } } private int _EX_Unit; public int EX_Unit { get { return _EX_Unit; } set { _EX_Unit = value; } } private int _In_Unit; public int In_Unit { get { return _In_Unit; } set { _In_Unit = value; } } private List<MoveDetailInfo> _Detail; public List<MoveDetailInfo> Detail { get { return _Detail; } set { _Detail = value; } } } /// <summary> /// 调拨明细信息 /// </summary> public class MoveDetailInfo { private int _ID; public int ID { get { return _ID; } set { _ID = value; } } private string _M_ID; public string M_ID { get { return _M_ID; } set { _M_ID = value; } } private string _DVID; public string DVID { get { return _DVID; } set { _DVID = value; } } private string _DVName; public string DVName { get { return _DVName; } set { _DVName = value; } } private string _DVType; public string DVType { get { return _DVType; } set { _DVType = value; } } } }
参考文章 :
.net泛型在序列化、反序列化JSON数据中的应用 http://www.cnblogs.com/jdmei520/archive/2009/09/19/1569600.html
一直是做的winform多一些, 可最近做的活儿都是常用JSON。
项目的服务交互是 jquery easyui , Handler.ashx做的, 后台是工具配置的数据.
fastJSON -> fastJSON.dll
Json.NET -> Newtonsoft.Json.dll
DataContractJsonSerializer -> System.Runtime.Serialization.Json
速度上对比:
fastJSON > Json.NET > Windows.Data.Json参考:
http://james.newtonking.com/json/help/html/JsonNetVsDotNetSerializers.htm
http://james.newtonking.com/json/help/html/JsonNetVsWindowsDataJson.htm
C#、PHP、Python 运算符的优先级
优先级
|
类别
|
运算符
|
1
|
基本
|
(x) x.y f(x) a[x] x++ x――new typeof sizeof checked unchecked
|
2
|
单目
|
+ - ! ~ ++x ――x (T)x
|
3
|
乘法与除法
|
* / %
|
4
|
加法与减法
|
+ -
|
5
|
移位运算
|
<< >>
|
6
|
关系运算
|
< > < = >=
|
7
|
条件等
|
= = ! =
|
8
|
位逻辑与
|
&
|
9
|
位逻辑异或
|
^
|
10
|
位逻辑或
|
|
|
11
|
条件与
|
&&
|
12
|
条件或
|
‖
|
13
|
条件
|
?:
|
14
|
赋值
|
= *= /= %= += -= <<= >>= &= ^= |=
|
上表源自: http://baike.baidu.com/view/262524.htm#4
C# 提供大量运算符,这些运算符是指定在表达式中执行哪些操作的符号。 ==, !=, <, >, <=, >=, binary +, binary -, ^, &,’ xml:space=”preserve”>整型运算包括 ==、!=、<、>、<=、>=、binary +、binary -、^、& |~, ++, –, and sizeof() are generally allowed on enumerations.’ xml:space=”preserve”>、~、++、– 和 sizeof(),通常在枚举时允许这些运算。 overloaded by the user, thus changing their meaning when applied to a user-defined type.’ xml:space=”preserve”>此外,很多运算符可被用户重载,由此在应用到用户定义的类型时更改这些运算符的含义。
下表列出了按发型版本不同的 C# 运算符:
结合方向 | 运算符 | 附加信息 |
---|---|---|
非结合 | clone new |
clone 和 new |
左 | [ |
array() |
非结合 | ++ -- |
递增/递减运算符 |
非结合 | ~ - (int) (float) (string) (array) (object) (bool) @ |
类型 |
非结合 | instanceof |
类型 |
右结合 | ! |
逻辑操作符 |
左 | * / % |
算术运算符 |
左 | + - . |
算术运算符 和 字符串运算符 |
左 | << >> |
位运算符 |
非结合 | < <= > >= <> |
比较运算符 |
非结合 | == != === !== |
比较运算符 |
左 | & |
位运算符 和 引用 |
左 | ^ |
位运算符 |
左 | | |
位运算符 |
左 | && |
逻辑运算符 |
左 | || |
逻辑运算符 |
左 | ? : |
三元运算符 |
右 | = += -= *= /= .= %= &= |= ^= <<= >>= |
赋值运算符 |
左 | and |
逻辑运算符 |
左 | xor |
逻辑运算符 |
左 | or |
逻辑运算符 |
左 | , |
多处用到 |
这个表给出Python的运算符优先级(从低到高).
从最低的优先级(最松散地结合)到最高的优先级(最紧密地结合)。
这意味着在一个表达式中,Python会首先计算表中较下面的运算符,然后在计算列在表上部的运算符。
运算符 | 描述 |
---|---|
lambda |
Lambda表达式 |
or |
布尔“或” |
and |
布尔“与” |
not x |
布尔“非” |
in,not in |
成员测试 |
is,is not |
同一性测试 |
<,<=,>,>=,!=,== |
比较 |
| |
按位或 |
^ |
按位异或 |
& |
按位与 |
<<,>> |
移位 |
+,- |
加法与减法 |
*,/,% |
乘法、除法与取余 |
+x,-x |
正负号 |
~x |
按位翻转 |
** |
指数 |
x.attribute |
属性参考 |
x[index] |
下标 |
x[index:index] |
寻址段 |
f(arguments...) |
函数调用 |
(experession,...) |
绑定或元组显示 |
[expression,...] |
列表显示 |
{key:datum,...} |
字典显示 |
'expression,...' |
字符串转换 |
上两表源自: http://tool.oschina.net/commons?type=6#php_
操作系统发行版本库. 收集整理各种操作系统的版本信息, 主要是linux, unix, 等版本数据. 开发中, 且涉及一些版权问题, 暂不提供下载.
给几个在C#中,使用正则表达式取页面下拉菜单(select)中的值示例:
//取html中全部 select 的 name Regex reg_name = new Regex(@"(?<=<select name=\"").*?(?=\"")"); //取html中全部<select>项的值 Regex reg_select = new Regex("(?is)<select name=*.*?>]*.*?</select>"); //取html中一个 select name 等于"Status"的值 Regex status = new Regex(@"(?is)<select name=\""status\"">]*.*?</select>");
一下是一段完整的代码和方法,取html中一个下拉菜单 select name 等于”Status”的中值,添加到DropDownList中:
string strDoc = (你的html); //取html中一个下拉菜单 select name 等于"Status"的中值 Regex status = new Regex(@"(?is)<select name=\""status\"">]*.*?</select>"); MatchCollection mc_status = status.Matches(strDoc); getSelectOptions(mc_status, cmbStatus); /// <summary> /// 取select对列表复制 /// </summary> /// <param name="selected"></param> /// <param name="cmb"></param> void getSelectOptions(MatchCollection selected, ComboBox cmb) { if (selected.Count < 1) return; txtValues.Text = ""; txtValues.Text = selected[0].Value.Replace("</option>", Environment.NewLine); string tmpTxt = ""; foreach (string s in txtValues.Lines) { if (s == "") continue; string a = ""; a = s.Replace("\"", "").Replace("<option value=\"", ""); int x = a.LastIndexOf(">"); tmpTxt += a.Substring(x + 1) + Environment.NewLine; } txtValues.Text = tmpTxt.Trim(); cmb.Items.Clear(); cmb.Items.AddRange(txtValues.Lines); cmb.SelectedIndex = 0; cmb.Size = cmb.PreferredSize; }
推荐一个正则表达式测试/验证工具 – http://bohu.net/blog/8814
这几天代码里用到很多正则表达式,需要验证,直接在程序里调试太麻烦。
比如:C#中用正则表达式取页面下拉菜单(select)中的值 – http://bohu.net/blog/8815
找到了这个验证工具:
正则表达式测试器 – http://deerchao.net/tools/regex_tester/index.htm
说明:该工具允许你测试和分析正则表达式。
winform中使用webBrowser抽取页面中的一些数据。断点“webBrowser1_DocumentCompleted”发现,跑进来了好多次。
DocumentCompleted执行多次,跟踪发现ReadyState状态不一样,分别是Intercative和Complete。
而MSDN对这两种状态值的解释是:
增加判断“ReadyState”之后继续,DocumentCompleted仍然执行了两次,但ReadyState状态一样都是Complete。再查原因。
MSDN对其解释是在多个的帧的情况下DocumentComplete获取触发多次。并非每个框架将触发此事件,但触发DownloadBegin事件的每个框架将触发相应的DocumentComplete事件。
最后webBrowser1_DocumentCompleted中的代码是:
private void webBrowser1_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e) { string BrowserUrl = webBrowser1.Url.ToString(); if (String.IsNullOrEmpty(BrowserUrl)) //检查未赋值或空值 return; if (BrowserUrl.Equals("about:blank")) //是否为空白页 return; if (webBrowser1.ReadyState != WebBrowserReadyState.Complete) //状态为完成 return; if (e.Url.ToString() != BrowserUrl) //检查事件url和webBrowser的url return; if (webBrowser1.DocumentText == "") return; ... ... }
还有一点,就是窗体打开就加载webBrowser1,如放在 Form_Load 会使程序界面加载很慢,建议放在 Form_Shown中(每当窗体第一次显示时发生)。
(相关参阅)可移植类库 – http://msdn.microsoft.com/zh-cn/library/gg597391(v=vs.100).aspx
.NET Framework 4.5
Visual Studio 2012 中的 可移植类库 项目支持 .NET Framework 应用的跨平台开发。
使用此项目编写和生成的可移植程序集,无须在多个平台的修改即可运行,例如 Windows 7,Windows 8,Silverlight ,Windows Phone 和 Xbox 360。 例如,可以创建在桌面应用程序、Windows 应用商店应用程序和移动应用程序中包含共享业务逻辑的类,然后从不同类型的应用程序中引用这些类。
可移植类库项目支持 .NET Framework、Silverlight、适用于 Windows 应用商店应用的 .NET、Windows Phone 和 Xbox 360 中的部分程序集,并提供可用于生成不在这些平台上进行修改也可运行的程序集的 Visual Studio 模板。 如果没有使用可移植类库项目,您必须先指定单个应用程序类型,然后手动修改其他应用程序类型的类库。 可移植类库 项目,可以通过生成在不同设备上的应用程序之间共享的可移植程序集来减少开发和测试代码的时间和费用。
说明 |
---|
如果您使用的是 Visual Studio 2013,则可用的选项和菜单可能与本文中的描述有所不同。 |
以下各节对 可移植类库 的功能进行了介绍:
平台 | 版本 |
---|---|
.NET Framework | .NET Framework 4 和更高版本.NET Framework 4.0.3 和更高版本.NET Framework 4.5 |
Silverlight | Silverlight 4 和更高版本(默认选中)。Silverlight 5 |
Windows Phone | Windows Phone 7 和更高版本(默认选中)Windows Phone 7.5 和更高版本Windows Phone 8
重要事项
Windows Phone SDK 8.0 for the Windows Phone 8 option. ‘>如果选择 Windows Phone 8,则必须安装 Windows Phone SDK 8.0。
|
适用于 Windows 应用商店应用的 .NET (*) | 不可用 |
Xbox 360 | 不可用 |
该表标识默认情况下处于选中状态的四个平台或版本。 Project Properties dialog box, as shown in the section Selecting the Platforms to Target.’>如 选择要面向的平台 所示,可以通过使用“项目属性”对话框来更改这些默认平台。
功能 | .NET Framework | Windows 应用商店 | Silverlight | Windows Phone | Xbox 360 |
---|---|---|---|---|---|
核心 | √ | √ | √ | √ | √ |
LINQ | √ | √ | √ | √ | |
IQueryable | √ | √ | √ | 7.5 和更高版本 | |
动态关键字 | 仅限 4.5 | √ | √ | ||
Managed Extensibility Framework (MEF) | √ | √ | √ | ||
网络类库 (NCL) | √ | √ | √ | √ | |
序列化 | √ | √ | √ | √ | |
Windows Communication Foundation (WCF) | √ | √ | √ | √ | |
模型视图视图模型 (MVVM) | 仅限 4.5 | √ | √ | √ | |
数据批注 | 仅 4.0.3 和 4.5 | √ | √ | ||
XLINQ | 仅 4.0.3 和 4.5 | √ | √ | √ | √ |
System.Numerics | √ | √ | √ |
例如,可移植类库项目不包含任何 UI 相关类型或成员,原因是不同设备的 UI 的行为不同。 如果您的目标是在 可移植类库 引入之前发布的平台(如 Xbox、.NET Framework 4 和Windows Phone 7),那么您可能会遇到限制。
.NET Framework Class Library.’>可查找 可移植类库 支持的成员,在 .NET Framework Class Library(.NET Framework 类库)的参考主题中查找。 在类的成员表中,受支持的成员旁边会显示以下可移植类库图标。
Chars property in the String class is supported in the Portable Class Library.’>例如,下面的图像显示,在 String 类中的 Chars 属性在 可移植类库 中支持。
Version Information section of a reference topic for a note indicating that a type or member is supported in the Portable Class Library project, as shown below.’>按如下显示,还可以查看参考主题的“版本信息”节,了解指示在可移植类库项目中受支持的类型或成员的注释。
using System; namespace ExamplePortableLibrary { public abstract class ExampleLocalSettings { public abstract void SetLocalValue(string name, object value); public static ExampleLocalSettings Instance { get; set; } } }
在 可移植类库 项目中,可以按以下方式使用。
ExampleLocalSettings.Instance.SetLocalValue("ExampleSetting", "New value to add");
在您的 Silverlight 项目中,添加引用到可移植的程序集,然后创建实现特定于 Silverlight 环境的本地设置操作的子类。 ExampleLocalSettings class.’>下面的示例演示 ExampleLocalSettings 类的 Silverlight 实现。
using System; using System.IO.IsolatedStorage; using ExamplePortableLibrary; namespace SilverlightApplication1 { class SilverlightImplementation : ExampleLocalSettings { public override void SetLocalValue(string name, object value) { IsolatedStorageSettings.ApplicationSettings.Add(name, value); } } }
在您的 Windows 应用商店 应用程序中,添加引用到可移植的程序集,然后创建实现特定于 Windows 应用商店 应用程序的本地设置操作的子类。 ExampleLocalSettings class for a Windows Store app.’>下面的示例演示 Windows 应用商店 应用程序的 ExampleLocalSettings 类的实现。
using System; using Windows.Storage; using ExamplePortableLibrary; namespace App1 { class AppImplementation : ExampleLocalSettings { public override void SetLocalValue(string name, object value) { ApplicationData.Current.LocalSettings.Values[name] = value; } } }
Instance property.’>在 Silverlight 应用程序和 Windows 应用商店 应用程序两个中,必须初始化子类的特定实现并将其设置为 Instance 属性。 通常,您在该应用程序开始时创建此示例。 以下示例显示如何初始化 Silverlight 实现。
ExampleLocalSettings.Instance = new SilverlightImplementation();
以下示例显示如何为 Windows 应用商店 应用程序初始化实现。
ExampleLocalSettings.Instance = new AppImplementation();
Using Portable Class Library with Model-View-View Model.’>有关如何在 可移植类库 项目中实现 MVVM 模式的更多信息,请参见 将可移植类库与模型-视图-视图模型配合使用。
该项目只引用受这些平台支持的程序集。 Solution Explorer, open the shortcut menu for the Portable Class Library project, and then choose Properties.’>若要更改目标平台,则在“解决方案资源管理器”中,打开 可移植类库 项目的快捷菜单,然后选择“属性”。
Library tab specifies the platforms that are currently targeted.’>在项目属性页上,“库”选项卡指定当前面向的平台。
Change button, and then select the appropriate check boxes.’>若要添加或移除目标平台,请选择“更改” 按钮,然后选择相应的复选框。
更改目标平台时,该项目中可用的程序集会发生更改以匹配您所选平台支持的程序集。 如果您的项目引用的程序集不受某个所选平台支持,必须移除对相应程序集的引用或更改目标平台。
部署引用 可移植类库 程序集的 .NET Framework 应用程序时,必须在正确版本的 .NET Framework 上指定一个依赖项。 通过指定此依赖项,可确保与您的应用程序一起安装所需的版本。 update, Update 4.0.3 for the .NET Framework 4, or the .NET Framework 4.5 installed.’>如果面向的是 .NET Framework 4 或更高版本,则必须已安装含 update(更新)的 .NET Framework 4、.NET Framework 4 的更新 4.0.3 或 .NET Framework 4.5。
.NET Framework Deployment Guide for Developers.’>有关部署 .NET Framework 应用程序的更多信息,请参见 .NET Framework 部署指南(针对开发人员)。
部署引用 可移植类库 程序集的基于 Silverlight 的应用程序时,您必须确保该应用程序所需的最低运行时版本匹配其目标版本。 如果面向的是 Silverlight 4,则版本必须是 4.0.60129.0 或更高版本。 <param name=”minRuntimeVersion” value=”4.0.60129.0″ /> in the webpage that hosts the Silverlight-based app, as follows:’>通过在承载基于 Silverlight 的应用程序的网页中包括,可设置 <param name=”minRuntimeVersion” value=”4.0.60129.0″ /> 参数值。
<div id="silverlightControlHost"> <object data="data:application/x-silverlight-2," type="application/x-silverlight-2" width="100%" height="100%"> <param name="source" value="ClientBin/SilverlightApplication.xap"/> <param name="onError" value="onSilverlightError" /> <param name="background" value="white" /> <param name="minRuntimeVersion" value="4.0.60129.0" /> <param name="autoUpgrade" value="true" /> <a href="http://go.microsoft.com/fwlink/?LinkID=149156&v=4.0.50826.0" style="text-decoration:none"> <img src=http://go.microsoft.com/fwlink/?LinkId=161376 alt="Get Microsoft Silverlight" style="border-style:none"/> </a> </object> <iframe id="_sl_historyFrame" style="visibility:hidden;height:0px;width:0px;border:0px"> </iframe> </div>
为了使可移植类库程序集在所有支持的平台中兼容,稍微更改了可移植类库中的部分成员。 API Differences in Portable Class Library.’>有关对哪些成员进行了更改以及进行了怎样的更改的详细信息,请参见可移植类库中的 API 差异。
原文连接: http://msdn.microsoft.com/zh-cn/library/gg597391(v=vs.110).aspx#feedback