我正在查看我刚才写的一些代码,并意识到我在C#中对赋值运算符做了一个假设.这是有问题的代码行(它按预期工作):
pointsChecked = pointsChecked ?? new List<Point>();
Run Code Online (Sandbox Code Playgroud)
pointsChecked是一个List,指定为递归函数的参数.它是具有默认值的默认参数null.我想要做的是初始化一次然后构建我已经检查过的点集合,因此它应该只在第一次迭代期间初始化.
我的假设是C#可以防止自我分配,就像C++ 在过载时operator= 应该提供一个后卫一样(即if(this == &rightHandSide) return *this;).但是,我无法找到任何明确说明C#属实的资源.
我发现的最接近的例子是关于null-coalescing运算符的这个问题,如果不是,那么它似乎会将对象分配回自身null.在这个例子中,没有人说过自我指派的任何内容,但我想确定这不是一个坏的做法,并且没有负面的副作用.
在MSDN上搜索我也发现(根据我的理解释义)右侧的值被复制到左侧的值并返回.因此,我再次不确定自我指派是否是一件坏事.
我知道我可以做到以下更安全:
if(pointsChecked == null)
{
pointsChecked = new List<Point>();
}
Run Code Online (Sandbox Code Playgroud)
但我宁愿理解自我分配的实际情况.
TextField当用户点击它时,我想控制小部件。如何实现该focusNode属性?说明中没有详细说明。
首先,我使用EF 6.0和Code First方法.我的context配置设置为启用"代理创建"和"延迟加载".
我的问题是:延迟加载是否与返回IEnumerable(而不是IQueryable)的方法的结果一起工作?
我认为下面的代码更具说明性:
public void Test()
{
var company = GetCompanies().FirstOrDefault();
if (company.Employees.Count() > 0)
{
//I got here without errors!
}
}
public IEnumerable<Company> GetCompanies()
{
var company = context.Companies.ToList();
//Note that I did not Include the Employee (child table)
return company;
}
Run Code Online (Sandbox Code Playgroud)
请注意评论,我说:"我来到这里没有错误!".这意味着即使在ToList()通话后延迟加载也能正常工作.我认为转换后IQueryable到List或IEnumerable在EF将失去做延迟加载的能力.
我已经注意到代理仍然启用了GetCompanies方法返回的实体(在debbug模式中,我可以看到丑陋的哈希,如:System.Data.Entity.DynamicProxies.Company_7035BEA374959AC1...).
即使在不同的DLL上调用它,延迟加载也可以工作.它是否正确?我的意思是,即使我的方法返回IEnumerable(而不是IQueryable),一个不同的DLL可以在我的数据库中进行后续调用吗?
任何澄清将不胜感激.
我有创建一个线程并CloseHandle在程序完成时关闭它的代码。
int main()
{
....
HANDLE hth1;
unsigned uiThread1ID;
hth1 = (HANDLE)_beginthreadex( NULL, // security
0, // stack size
ThreadX::ThreadStaticEntryPoint,
o1, // arg list
CREATE_SUSPENDED, // so we can later call ResumeThread()
&uiThread1ID );
....
CloseHandle( hth1 );
....
}
Run Code Online (Sandbox Code Playgroud)
但是为什么我需要关闭手柄呢?如果我不这样做会怎样?
我一直在处理一个奇怪的应用程序挂在我的客户端安装中。在尝试了几件事之后,我得出的结论是,如果没有转储,它将无法工作。所以我在挂机时间从我的一个客户那里得到了一个转储。我必须注意,它只发生在我的安装中,而不发生在我的开发计算机中。
在我的转储中,我看到 SystemEvents.OnUserPreferenceChanged 事件导致我的 UI 线程阻塞等待线程,即不再泵送消息。
在这里和谷歌搜索后,我发现有些人也有这个问题。我上下检查我的代码,看看我们是否有机会在非 UI 线程上创建了一个控件或表单,但没有运气。
这是我的 !clrstack
0012ee5c 7c90e514 [HelperMethodFrame_1OBJ: 0012ee5c]
System.Threading.WaitHandle.WaitOneNative(Microsoft.Win32.SafeHandles.SafeWaitHandle, UInt32, Boolean, Boolean)
0012ef08 792b68af System.Threading.WaitHandle.WaitOne(Int64, Boolean)
0012ef24 792b6865 System.Threading.WaitHandle.WaitOne(Int32, Boolean)
0012ef38 7b6f1a4f System.Windows.Forms.Control.WaitForWaitHandle(System.Threading.WaitHandle)
0012ef4c 7ba2d68b System.Windows.Forms.Control.MarshaledInvoke(System.Windows.Forms.Control, System.Delegate, System.Object[], Boolean)
0012efec 7b6f33ac System.Windows.Forms.Control.Invoke(System.Delegate, System.Object[])
0012f020 7b920bd7 System.Windows.Forms.WindowsFormsSynchronizationContext.Send(System.Threading.SendOrPostCallback, System.Object)
0012f038 7a92ed62 Microsoft.Win32.SystemEvents+SystemEventInvokeInfo.Invoke(Boolean, System.Object[])
0012f06c 7a92dc8f Microsoft.Win32.SystemEvents.RaiseEvent(Boolean, System.Object, System.Object[])
0012f0b8 7a92e227 Microsoft.Win32.SystemEvents.OnUserPreferenceChanged(Int32, IntPtr, IntPtr)
0012f0d8 7aaa06ec Microsoft.Win32.SystemEvents.WindowProc(IntPtr, Int32, IntPtr, IntPtr)
0012f0dc 003c222c [InlinedCallFrame: 0012f0dc]
0012f2a0 7b1d8d2e System.Windows.Forms.Application+ComponentManager.System.Windows.Forms.UnsafeNativeMethods.IMsoComponentManager.FPushMessageLoop(Int32, Int32, Int32)
0012f33c 7b1d8997 System.Windows.Forms.Application+ThreadContext.RunMessageLoopInner(Int32, System.Windows.Forms.ApplicationContext)
0012f390 7b1d87e1 System.Windows.Forms.Application+ThreadContext.RunMessageLoop(Int32, …Run Code Online (Sandbox Code Playgroud) 我有一个阵列
public static string[] commands =
{
"command1",
"command2",
"command3",
"command4",
"command5",
"command6",
"command7"
};
Run Code Online (Sandbox Code Playgroud)
我想在函数中使用数组
public static bool startCommand (string commandName) {
//stuff
if (commandName == commands[0]) {
//stuff
return true;
}
else {
//stuff
switch (commandName) {
case commands [1]:
//stuff
break;
case commands [2]:
//stuff
break;
case commands [3]:
//stuff
break;
case commands [4]:
//stuff
break;
case commands [5]:
//stuff
break;
case commands [6]:
//stuff
break;
default:
return false;
}
//do stuff
return true;
}
}
Run Code Online (Sandbox Code Playgroud)
这给我的错误是每个案例的"一个恒定值". …
我有一些c#的问题.我想更改一个字符串,该字符串在代码中途改变,并在以后测试为true或false.
到目前为止,我一直有这个问题,并提到互联网.我真的找不到任何东西.
例..
if (LineIN == "silent")
{
string silent = "true"; //Change string from false to true
}
Run Code Online (Sandbox Code Playgroud)
测试仪...
if (silent == "true")
{
// Do something
}
Run Code Online (Sandbox Code Playgroud)
我正在使用视觉工作室,它说我需要创建一个字符串,如果我这样做.之后它给了我更多错误..
Console.WriteLine("");
Console.ForegroundColor = ConsoleColor.DarkCyan;
Console.Write("RSA #: ");
string LineIN = Console.ReadLine();
if (LineIN == "silent")
{
string silent = "true";
}
}
if (silent == "false") { // }
Run Code Online (Sandbox Code Playgroud) 我创建了一个布尔二维数组并memset像这样使用:
bool chk[3][3];
memset(chk, 1, 9*sizeof(chk[0]));
Run Code Online (Sandbox Code Playgroud)
我使用以下代码块得到了预期的输出(每行都有 1 )
for(int i = 0 ; i < 3; i++){
for(int j = 0; j < 3; j++)
cout<<chk[i][j] <<" ";
cout<<endl;
}
Run Code Online (Sandbox Code Playgroud)
但是当我尝试操作数组时,我得到了意想不到的结果
然后我尝试了
memset(chk, 1, 9*sizeof(chk[0][0]));
Run Code Online (Sandbox Code Playgroud)
这次一切都很好并得到了我预期的结果(操作后)
您能帮我指出 memset() 中到底发生了什么吗?
嗨,当我输入是或否/否它没有做它应该做的我做错了什么?
class Program
{
static void Main(string[] args)
{
Console.WriteLine("Username:");
String user = Console.ReadLine();
Console.WriteLine("Password:");
String Pass = Console.ReadLine();
Console.WriteLine("Are You Sure Your User: " + user + " And Pass: " + Pass + " is correct? Yes/No");
Console.ReadLine();
if (Console.ReadLine() == "Yes" || Console.ReadLine() == "yes")
{
Console.WriteLine("You May now close this");
}
else if(Console.ReadLine() == "No" || Console.ReadLine() == "no")
{
Console.WriteLine("Pleas Press enter");
System.Diagnostics.Process.Start(Environment.GetCommandLineArgs()[0], Environment.GetCommandLineArgs().Length > 1 ? string.Join(" ", Environment.GetCommandLineArgs().Skip(1)) : null);
}
}
}
Run Code Online (Sandbox Code Playgroud) 如何在C++中定义动态多维数组?例如,二维数组?我尝试使用指针指针,但不知怎的,它失败了.