下面的strlen()函数是否只被调用一次(存储的值用于进一步的比较); 或者每次进行比较时都会调用它?
for (i = 0; i < strlen(word); i++)
{ /* do stuff */ }
Run Code Online (Sandbox Code Playgroud) 我的问题本质上是一个简单的问题,虽然我正在寻找这里可能的深入答案:LINQ to XML如何在幕后工作?
现在,我已经有了相当多的LINQ to XML用于各种应用程序的经验,所以它的接口对我来说并不陌生,但我对内部的运行方式一无所知.现在,我确实有一般多少LINQ提供工作的一些认识(实施IQueryable和IQueryProvider和利用访问者模式,在本质).但是,我还没有发现LINQ to XML的LINQ提供程序的任何内容 - 即使搞乱了Reflector并没有让我任何地方,但也许我错过了显而易见的事情.最有趣的是,我无法IQueryProvider在System.Xml.Linq程序集/命名空间中找到任何LINQ提供程序(实现)的证据.
从观察LINQ到XML模型,它让我感到一种相当独特的LINQ形式,因为LINQ查询和相关语法似乎不是技术的重要组成部分,它似乎更多地基于可查询的DOM提供了许多有用的扩展方法的模型.实际上,我首先要知道的是,LINQ to XML甚至是否具有标准意义上的查询提供程序(例如LINQ to SQL),或者它本质上是一个带有扩展方法的框架,您可以在其上使用LINQ to Objects来方便使用.另外,我也很好奇从XML代码到DOM层次结构的解析/转换是如何完成的 - 在这个意义上是否XDocument类似于旧的XmlDocument?是否XmlReader在加载后使用一个或类似的幕后解析和解释文档?
这是一个非常开放的问题,因此任何有关LINQ to XML如何在幕后运行的信息都将受到欢迎.我的目的主要是建立一个如何设计这种特定LINQ技术的图片,以便随后我可以尝试自己模拟一种与XML结构类似的格式.
我正在使用MVVM Light V3 alpha 3编写一个WPF 4应用程序(使用VS2010 RC),并且在这里遇到了一些奇怪的行为......
我有一个打开a的命令,Window那个Window创建了ViewModel等等 - 那里没什么奇怪的.
在那Window我有一些RelayCommands,例如:
CategoryBeenSelected = new RelayCommand(() => OnCategoryUpdate = true);
Run Code Online (Sandbox Code Playgroud)
没有什么奇怪的 - 它按照我的预期工作.
问题是我不能使用通用RelayCommand的CanExecute方法/ lambda表达式.
这有效:
DeleteCategoryCommand = new RelayCommand<int>(DeleteCategory);
Run Code Online (Sandbox Code Playgroud)
但这不是:
DeleteCategoryCommand = new RelayCommand<int>(DeleteCategory, CanDeleteCategory);
Run Code Online (Sandbox Code Playgroud)
窗口没有出现.我的意思是,我单击打开窗口的按钮,应用程序刚刚被阻止,几秒钟后,Window的InitializeComponent方法抛出一个NullReferenceException(对象引用未设置为对象的实例)
简而言之,如果我将一个CanExecute方法放在a上RelayCommand<T>,Window那么拥有 ViewModel(带有)的那个RelayCommand<T>就无法实例化.如果我删除了CanExecute,Window显示出来.
这里的问题在哪里?我糊涂了.
谢谢.
编辑:根据要求,这是堆栈跟踪:
A first chance exception of type 'System.NullReferenceException' occurred in PresentationFramework.dll at GalaSoft.MvvmLight.Command.RelayCommand`1.CanExecute(Object parameter) at System.Windows.Controls.Primitives.ButtonBase.UpdateCanExecute() at …
我最近为F#项目编写了以下组合和排列函数,但我很清楚它们远未优化.
/// Rotates a list by one place forward.
let rotate lst =
List.tail lst @ [List.head lst]
/// Gets all rotations of a list.
let getRotations lst =
let rec getAll lst i = if i = 0 then [] else lst :: (getAll (rotate lst) (i - 1))
getAll lst (List.length lst)
/// Gets all permutations (without repetition) of specified length from a list.
let rec getPerms n lst =
match n, lst with
| 0, _ -> …Run Code Online (Sandbox Code Playgroud) 我正在接受C#4.0,其中一个令我困惑的事情就是屏障概念.
这不仅仅是使用WaitAll方法WaitHandle吗?是不是等待所有线程完成?
我从这个页面学到了屏障结构:http://www.managed-world.com/archive/2009/02/09/an-intro-to-barrier.aspx
但是,它似乎就像WaitAll方法一样.我错过了什么?这有什么区别?
谢谢.
我正在尝试为F#中绑定到特定泛型类型参数的泛型类型创建各种扩展方法,但该语言似乎不允许我:
我想做的是如下:
type IEnumerable<int> with
member this.foo =
this.ToString()
Run Code Online (Sandbox Code Playgroud)
但它给了我编译器错误(强调int关键字):
类型名称中的意外标识符.预期的中缀运算符,引号或其他标记.
下面做工作,尽管它没有特异性结合的泛型类型参数int,因为我想:
type IEnumerable<'a> with
member this.foo =
this.ToString()
Run Code Online (Sandbox Code Playgroud)
有没有办法在F#中实现这个目标 - 我可能只是使用了错误的语法?如果没有,我会很感激,如果有人可以建议一个解决方法,也许在某处使用类型约束.
generics extension-methods f# generic-type-argument type-constraints
public string Foo(object obj) {
return null;
}
public string Foo(string str) {
return null;
}
var x = Foo((dynamic) "abc");
Run Code Online (Sandbox Code Playgroud)
为什么x动态,编译器不够智能或者我错过了重要的东西?
我一直在尝试使用CreateProcessAsUserWindows API 的功能在特定用户的上下文中创建一个新进程,但似乎遇到了一个相当讨厌的安全问题......
在我进一步解释之前,这里是我正在使用的代码来启动新进程(一个控制台进程 - PowerShell具体,尽管它无关紧要).
private void StartProcess()
{
bool retValue;
// Create startup info for new console process.
var startupInfo = new STARTUPINFO();
startupInfo.cb = Marshal.SizeOf(startupInfo);
startupInfo.dwFlags = StartFlags.STARTF_USESHOWWINDOW;
startupInfo.wShowWindow = _consoleVisible ? WindowShowStyle.Show : WindowShowStyle.Hide;
startupInfo.lpTitle = this.ConsoleTitle ?? "Console";
var procAttrs = new SECURITY_ATTRIBUTES();
var threadAttrs = new SECURITY_ATTRIBUTES();
procAttrs.nLength = Marshal.SizeOf(procAttrs);
threadAttrs.nLength = Marshal.SizeOf(threadAttrs);
// Log on user temporarily in order to start console process in its security context.
var hUserToken = IntPtr.Zero; …Run Code Online (Sandbox Code Playgroud) 我有一个128个布尔数组,代表位.如何将这128位表示转换为16字节?
例:
我有一个看起来像这样的数组:
0110001100110000100010111011001011010011010001010001101101001100
1000010000000000001000111111111101000011111001111011111011111001
Run Code Online (Sandbox Code Playgroud)
(转换为1和0更简洁)
我需要将这些位转换为以下字节数组:
99 48 139 178 211 69 27 76 132 0 35 255 67 231 190 249
Run Code Online (Sandbox Code Playgroud)
编辑:这似乎不起作用:
public byte[] ToByteArray() {
int numBytes = Count / 8;
if (_bits.Count % 8 != 0) numBytes++;
byte[] bytes = new byte[numBytes];
int byteIndex = 0, bitIndex = 0;
for (int i = 0; i < _bits.Count; i++) {
if (_bits[i])
bytes[byteIndex] |= (byte)(1 << bitIndex);
bitIndex++;
if (bitIndex == 8) {
bitIndex = 0;
byteIndex++; …Run Code Online (Sandbox Code Playgroud) c# ×5
.net ×2
.net-4.0 ×2
f# ×2
byte ×1
c ×1
c#-4.0 ×1
combinations ×1
exit-code ×1
generics ×1
linq ×1
linq-to-xml ×1
loops ×1
mvvm ×1
permutation ×1
privileges ×1
process ×1
python ×1
relaycommand ×1
winapi ×1
wpf ×1
xml ×1