小编E. *_*fat的帖子

C#中的自我分配

我正在查看我刚才写的一些代码,并意识到我在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)

但我宁愿理解自我分配的实际情况.

c# assignment-operator

12
推荐指数
1
解决办法
2445
查看次数

Flutter:如何在 TextField 上使用 focusNode 属性

TextField当用户点击它时,我想控制小部件。如何实现该focusNode属性?说明中没有详细说明。

dart flutter

10
推荐指数
2
解决办法
1万
查看次数

实体框架 - 即使使用ToList()也可以进行延迟加载

首先,我使用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()通话后延迟加载也能正常工作.我认为转换后IQueryableListIEnumerable在EF将失去做延迟加载的能力.

我已经注意到代理仍然启用了GetCompanies方法返回的实体(在debbug模式中,我可以看到丑陋的哈希,如:System.Data.Entity.DynamicProxies.Company_7035BEA374959AC1...).

即使在不同的DLL上调用它,延迟加载也可以工作.它是否正确?我的意思是,即使我的方法返回IEnumerable(而不是IQueryable),一个不同的DLL可以在我的数据库中进行后续调用吗?

任何澄清将不胜感激.

c# entity-framework

9
推荐指数
1
解决办法
3497
查看次数

我需要调用 CloseHandle 吗?

我有创建一个线程并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)

但是为什么我需要关闭手柄呢?如果我不这样做会怎样?

c++ visual-c++

5
推荐指数
1
解决办法
4809
查看次数

由于 SystemEvents.OnUserPreferenceChanged 事件,WinForms 应用程序挂起

我一直在处理一个奇怪的应用程序挂在我的客户端安装中。在尝试了几件事之后,我得出的结论是,如果没有转储,它将无法工作。所以我在挂机时间从我的一个客户那里得到了一个转储。我必须注意,它只发生在我的安装中,而不发生在我的开发计算机中。

在我的转储中,我看到 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)

.net c# winforms

3
推荐指数
1
解决办法
5517
查看次数

如何使用字符串数组来处理C#中switch语句中的case?

我有一个阵列

    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# arrays

2
推荐指数
1
解决办法
232
查看次数

更改活动字符串c#

我有一些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)

c# string

2
推荐指数
1
解决办法
73
查看次数

memset() 在 C++ 中如何工作

我创建了一个布尔二维数组并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() 中到底发生了什么吗?

c++ memset multidimensional-array

2
推荐指数
1
解决办法
1004
查看次数

if和else if语句C#

嗨,当我输入是或否/否它没有做它应该做的我做错了什么?

在此输入图像描述

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#

0
推荐指数
1
解决办法
93
查看次数

如何在C++中正确使用动态分配的多维数组

如何在C++中定义动态多维数组?例如,二维数组?我尝试使用指针指针,但不知怎的,它失败了.

c++ arrays dynamic-arrays

-3
推荐指数
1
解决办法
1804
查看次数