Showing posts with label 程序人生. Show all posts
Showing posts with label 程序人生. Show all posts

2010-10-12

2010-01-27

Resharper 提示”lambda expression to statement”

最近用上了resharper,实时对代码进行改进,碰到这么一个提示“lambda expression to statement”,那什么是lambda expression,什么是lambda statement?二者有什么区别?

Expression:
var exprBooks = books.Find(book => book.Author.Contains("Fowler"));


Statement:

var stmtBooks = books.Find(book => { return book.Author.Contains("Fowler"); });



A lambda statement contains braces and a function body, and can potentially have multiple lines like a standard delegate. A lambda expression is the single line with an implicit return



http://www.lostechies.com/blogs/jimmy_bogard/archive/2008/07/18/expressions-and-lambdas.aspx

2010-01-26

.net links 2010/1/26

Use .NET Built-in Methods to Save Time and Headaches 

  TryParse() and File.WriteAllText(file, str) are really useful to me!

If you are using a loop, you're doing it wrong

if you can use Linq, do not use for and foreach

.Net Tip: Convert a String to Title Case

string helloWorld = "hello world haha ds s w";

Console.WriteLine(
    System.Threading.Thread.CurrentThread.CurrentCulture.TextInfo.ToTitleCase(helloWorld));

可以写个扩展方法

IEnumerable, IEnumerator, GetEnumerator()

如果想要自定义类型支持foreach,那么此类型必须实现IEnumerable 接口,然后在GetEnumerator()方法中返回实现IEnumerator接口的对象,实现Current,MoveNext,Reset方法。好消息是2.0中加入了yield关键字,一句yield return,编译器就会给你做剩下的事情

using System;
using System.Collections;

namespace ConsoleApplication2
{
public class Person
{
public Person(string fName, string lName)
{
FirstName = fName;
LastName = lName;
}

public string FirstName;
public string LastName;
}

public class People : IEnumerable
{
private Person[] _people;
public People(Person[] pArray)
{
_people = new Person[pArray.Length];

for (int i = 0; i < pArray.Length; i++)
{
_people[i] = pArray[i];
}
}

IEnumerator IEnumerable.GetEnumerator()
{
//return new PeopleEnum(_people);
// and you can delete below PeopleEnum class
for (int i = 0; i < _people.Length; i++)
{
yield return _people[i];
}
}
}

public class PeopleEnum : IEnumerator
{
public Person[] _people;

// Enumerators are positioned before the first element
// until the first MoveNext() call.
int position = -1;

public PeopleEnum(Person[] list)
{
_people = list;
}

public bool MoveNext()
{
position++;
return (position < _people.Length);
}

public void Reset()
{
position = -1;
}

public object Current
{
get
{
try
{
return _people[position];
}
catch (IndexOutOfRangeException)
{
throw new InvalidOperationException();
}
}
}
}

class App
{
static void Main()
{
Person[] peopleArray = new Person[3]
{
new Person("Tom", "Cat"),
new Person("Jon", "Walker"),
new Person("Jet", "Li"),
};

People peopleList = new People(peopleArray);
foreach (Person p in peopleList)
Console.WriteLine(p.FirstName + " " + p.LastName);

}
}

或者是返回IEnumerable的方法

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

namespace ConsoleApplication2
{
class Program
{
static void Main(string[] args)
{
foreach (var p in Primes(100))
{
Console.WriteLine(p);
}
}

public static IEnumerable<int> Primes(int max)
{
yield return 2;
var found = new List<int> {3};
var candidate = 3;
while (candidate <= max)
{
var isPrime = found.TakeWhile(
prime => prime*prime <= candidate).All(prime => candidate%prime != 0);
if (isPrime)
{
found.Add(candidate);
yield return candidate;
}
candidate += 2;
}
}
}
}

Implementing iterators with yield statements

Behind the scenes of the C# yield keyword

2010-01-25

typeof() GetType() is

Suppose there are three Classes(type) Aninaml, Dog and Tree
and 3 instances animal dog and tree

if(dog is Animal) // true
dog.GetType() == typeof(Dog) // true

call to GetType gets resolved at runtime, while typeof is resolved at compile time.

throw ex 和 throw 一样么?

不一样,
throw 是输出整个stacktrack,考虑多层设计中,UI层有try catch, 逻辑层有 try catch, 数据层有try catch, 三者均使用 throw, 假设是在数据层出错,输出的exception 信息会显示这三层的throw point,由此可以知道 exception的源头在数据层;如果是在逻辑层出错,会输出两层的 throw point, 由此可知 exception 的源头在逻辑层
但是用 throw ex的话,会清空stacktrace,如上例,你只能看到UI层的exception,无法获知到底是发生在UI层还是逻辑层还是数据层

因此,总是使用throw 抛出原始 exception

JIT and NGEN

JIT, Just in time,即时编译,每次运行都会进行,会对代码进行优化
NGEN Native image generator,在运行前一次性的把代码转换为本地代码并存储为本地文件,会改善程序的启动性能,但对总体的性能,有可能提升,也有可能降低

Assembly.LoadFile() Assembly.LoadFrom() Assembly.Load()

1、Assembly.LoadFile()只载入相应的dll文件,比如Assembly.LoadFile(”a.dll”),则载入a.dll,假如a.dll中引用了b.dll的话,b.dll并不会被载入。Assembly.LoadFrom则不一样,它会载入dll文件及其引用的其他dll,比如上面的例子,b.dll也会被载入。
2、用Assembly.LoadFrom()载入一个Assembly时,会先检查前面是否已经载入过相同名字的Assembly,比如a.dll有两个版本(版本1在目录1下,版本2放在目录2下),程序一开始时载入了版本1,当使用Assembly.LoadFrom(”2″”a.dll”)载入版本2时,不能载入,而是返回版本1。Assembly.LoadFile的话则不会做这样的检查,比如上面的例子换成Assembly.LoadFile的话,则能正确载入版本2。

3、Assembly.Load()方法参数为程序集的名称不包含扩展名

.net 4.0 中只保留了LoadFrom() 方法

http://msdn.microsoft.com/en-us/library/ee191568(VS.100).aspx


http://blog.csdn.net/nanqingfei/archive/2009/10/12/4659004.aspx

一个有用的C# Attribute: DebuggerDisplay


namespace ConsoleApplication2
{
[DebuggerDisplay("count ={Count}")]
public class Test
{
public int Count{ get; set;}
public string Name { get; set; }
public void Clear()
{
}
}
}


如上代码示例所示,该属性可以让对象在鼠标悬停时按格式显示Count字段的值,而不必点开对象查找,当对象有非常多的Property时,这个属性尤其有用

2009-12-30

Visual stuido 常用快捷键

Visual C# Development Settings Default KeyBindings

Editing

Edit.CollapseToDefinitions

CTRL + M, O

Collapses existing regions to provide a high-level view of the types and members in the source file.

Edit.CommentSelection

CTRL + K, C or CTRL + E, C

Inserts // at the beginning of the current line or every line of the current selection.

Edit.FormatDocument

CTRL + K, D or CTRL + E, D

Formats the current document according to the indentation and code formatting settings specified on the Formattingpane under Tools | Options | Text Editor | C#.

Edit.FormatSelection

CTRL + K, F or CTRL + E, F

Formats the current selection according to the indentation and code formatting settings specified on the Formatting pane under Tools | Options | Text Editor | C#.

Edit.InsertSnippet

CTRL + K, X

Displays the Code Snippet Picker. The selected code snippet will be inserted at the cursor position.

Edit.StopOutlining

CTRL + M, P

Removes all outlining information from the whole document.

Edit.SurroundWith

CTRL + K, S

Displays the Code Snippet Picker. The selected code snippet will be wrapped around the selected text.

Edit.ToggleAllOutlining

CTRL + M, L

Toggles all previously collapsed outlining regions between collapsed and expanded states.

Expand Code Snippet

[TAB]

Expand Code Snippet

Edit.ToggleOutliningExpansion

CTRL + M, M

Toggles the currently selected collapsed region between the collapsed and expanded state.

Edit.UncommentSelection

CTRL + K, U or CTRL + E, U

Removes the // at the beginning of the current line or every line of the current selection.

Edit.CycleClipboardRing

CTRL + SHIFT + V

Pastes text from the Clipboard ring to the cursor location in the file. Subsequent use of the shortcut key iterates through the items in the Clipboard ring.

Edit.Replace

CTRL + H

Displays the replace options in the Quick tab of the Find and Replace dialog box.

Edit.ReplaceInFiles

CTRL + SHIFT + H

Displays the replace options on the In Files tab of the Find and Replace dialog box.

View.ShowSmartTag

CTRL + . or SHIFT + ALT + F10

Displays the available options on the smart tag menu.

Edit.InvokeSnippetFromShortcut

TAB

Inserts the expanded code snippet from the shortcut name.

File

File.NewProject

CTRL + SHIFT + N

Displays the New Projectdialog box.

File.OpenProject

CTRL + SHIFT + O

Displays the Open Projectdialog box, where existing projects can be added to the solution.

Project.AddClass

SHIFT + ALT + C

Displays the Add New Item dialog box and selects Class template as default.

Project.AddExistingItem

SHIFT + ALT + A

Displays the Add Existing Item dialog box, where existing files can be added to the current project.

Project.AddNewItem

CTRL + SHIFT + A

Displays the Add New Item dialog box, where a new file can be added to the current project.

Window.ShowEzMDIFileList

CTRL + ALT + DOWN ARROW

Displays a pop-up listing of all open documents.

Edit.OpenFile

CTRL + O

Displays the Open Filedialog box where a file can be selected to be opened. This does not add the file to the project.

IntelliSense

Edit.CompleteWord

CTRL + SPACE or CTRL + K, W

Completes the current word in the completion list.

Edit.ListMembers

CTRL + J or CTRL + K, L

Invokes the IntelliSense completion list.

Edit.QuickInfo

CTRL + K, I

Displays the complete declaration for the specified identifier in your code in a Quick Info tool tip.

Edit.ParameterInfo

CTRL + SHIFT + SPACE or CTRL K, P

Displays the name, number and type of parameters required for the specified method.

Navigation

Edit.FindAllReferences

SHIFT + F12 or CTRL + K, R

Displays a list of all references for the symbol selected.

Edit.GoToBrace

CTRL + ]

Moves the cursor location to the matching brace in the source file.

Edit.GoToDefinition

F12

Navigates to the declaration for the selected symbol in code.

Edit.GoToNextLocation

F8

Moves the cursor to the next item, such as a task in the Task List window or a search match in the Find Results window. Subsequent invocations will move to the next item in the list.

Edit.IncrementalSearch

CTRL + I

Activates incremental search. If incremental search is on, but no input is passed, the previous search query is used. If search input has been found, next invocation searches for the next occurrence of the input text.

View.ClassViewGoToSearchCombo

CTRL + K, CTRL + V

Brings focus to the Class View search box.

View.ForwardBrowseContext

CTRL + SHIFT + 7

Moves to the next item called in code in the current file. Uses the Go To Definition navigation stack.

View.NavigateBackward

CTRL + MINUS SIGN (-)

Moves to the previously browsed line of code.

View.NavigateForward

CTRL + SHIFT + MINUS SIGN (-)

Moves to the next browsed line of code.

View.PopBrowseContext

CTRL + SHIFT + 8

Moves to the previous item called in code in the current file. Uses the Go To Definition navigation stack.

Edit.FindInFiles

CTRL + SHIFT + F

Displays the In Files tab of theFind and Replace dialog box.

Edit.FindSymbol

ALT + F12

Displays the Find Symbolpane of the Find and Replacedialog box.

View.ViewCode

F7

Displays the selected item inCode view of the editor.

View.ViewDesigner

SHIFT + F7

Switches to Design view for the current document. Available only in Source view.

View.ViewMarkup

SHIFT + F7

Switches to Source view for the current document. Available only in Design view.

Window.MoveToNavigationBar

CTRL + F2

Moves the cursor to the drop-down bar located at the top of the code editor when the editor is in Code view or Server Codeview.

Edit.Find

CTRL + F

Displays the Quick tab of theFind and Replace dialog box.

Edit.GoTo

CTRL + G

Displays the Go To Line dialog box.

Edit.GoToFindCombo

CTRL + /

Puts the cursor in theFind/Command box on theStandard toolbar.

Refactoring

Refactor.EncapsulateField

CTRL + R, E

Displays the Encapsulate Field dialog box, which allows creation of a property from an existing field and updates all references to use the new property.

Refactor.ExtractInterface

CTRL + R, I

Displays the Extract Interfacedialog box, which allows creation of a new interface with members derived from an existing class, struct, or interface.

Refactor.ExtractMethod

CTRL + R, M

Displays the Extract Methoddialog box, which allows creation of a new method from the selected code.

Refactor.PromoteLocalVariabletoParameter

CTRL + R, P

Moves a variable from a local usage to a method, indexer, or constructor parameter and updates all call sites appropriately.

Refactor.RemoveParameters

CTRL + R, V

Displays the Remove Parameters dialog box, which allows removal of parameters from methods, indexers, or delegates by changing the declaration at any locations where the member is called.

Refactor.Rename

CTRL + R, R or F2

Displays the Rename dialog box, which allows renaming all references for an identifier.

Refactor.ReorderParameters

CTRL + R, O

Displays the Reorder Parameters dialog box, which allows changes to the order of the parameters for methods, indexers, and delegates.

Window

View.ClassView

CTRL + W, C

Displays the Class Viewwindow.

View.CodeDefinitionWindow

CTRL + W, D

Displays the Code Definitionwindow.

View.CommandWindow

CTRL + W, A

Displays the Commandwindow, where commands can be invoked to manipulate the integrated development environment (IDE).

View.ErrorList

CTRL + W, E

Displays the Error List window.

View.ObjectBrowser

CTRL + W, J

Displays the Object Browser.

View.Output

CTRL + W, O

Displays the Output window, where status messages can be viewed at run time.

View.PropertiesWindow

CTRL + W, P

Displays the Propertieswindow, which lists the design-time properties and events for the currently selected item.

View.SolutionExplorer

CTRL + W, S

Displays Solution Explorer, which lists the projects and files in the current solution.

View.TaskList

CTRL + W, T

Displays the Task List window, which displays custom tasks, comments, shortcuts, warnings and error messages.

View.Toolbox

CTRL + W, X

Displays the Toolbox, which contains controls that can be included or used with your code.

View.ServerExplorer

CTRL + W, L

Displays Server Explorer, which lets you view and manipulate database servers, event logs, message queues, Web services, and other operating system services.

Window.CloseToolWindow

SHIFT + ESC

Closes the current tool window.

Data.ShowDataSources

SHIFT + ALT + D

Displays the Data Sourceswindow.

Window.CloseDocumentWindow

CTRL + F4

Closes the current tab.

Window.NextDocumentWindowNav

CTRL + TAB

Displays the IDE Navigator, with the first document window selected.

Build

Build.BuildSolution

F6 or CTRL + SHIFT + B

Builds all the projects in the solution.

Build.BuildSelection

SHIFT + F6

Builds the selected project and its dependencies.

Debugging

Debug.Autos

CTRL + D, A

Displays the Autos window, which displays variables used in the current line of code and the preceding line of code.

Debug.CallStack

CTRL + D, C

Displays the Call Stackwindow, which displays a list of all active methods or stack frames for the current thread of execution.

Debug.Immediate

CTRL + D, I

Displays the Immediatewindow, where expressions can be evaluated.

Debug.Locals

CTRL + D, L

Displays the Localswindow, which displays the local variables and their values for each method in the current stack frame.

Debug.QuickWatch

CTRL + D, Q

Displays the QuickWatchdialog box that has the current value of the selected expression.

Debug.Start

F5

Launches the application under the debugger based off of the settings from the startup project. When in Break mode, invoking this command will run the application until the next breakpoint.

Debug.StartWithoutDebugging

CTRL + F5

Launches the application without invoking the debugger.

Debug.StepInto

F11

Executes code one statement at a time, following execution into method calls.

Debug.StepOut

SHIFT + F11

Executes the remaining lines of a method in which the current execution point is located.

Debug.StepOver

F10

Executes the next line of code, but does not follow execution through any method calls.

Debug.StopDebugging

SHIFT + F5

Stops running the current application under the debugger.

Debug.ToggleBreakpoint

F9

Sets or removes a breakpoint at the current line.

Debug.Watch

CTRL + D, W

Displays the Watchwindow, which displays the values of selected variables or watch expressions.

Debug.EnableBreakpoint

CTRL + F9

Toggles the breakpoint between disabled and enabled.

Make Datatip Transparent

[CTRL]

Causes a visible datatip to become transparent.