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
throw ex 和 throw 一样么?
JIT and NGEN
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
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. |
