小编jsm*_*ith的帖子

如何在C#中使用多个修饰键

我正在使用keydown事件来检测按下的键,并为各种操作提供了几个键组合.

if (e.KeyCode == Keys.C && e.Modifiers == Keys.Control && e.Modifiers == Keys.Shift)
{
    //Do work
}
else if (e.KeyCode == Keys.V && e.Modifiers == Keys.Control)
{
    //Paste
}
Run Code Online (Sandbox Code Playgroud)

出于某种原因,我点击Ctrl+ Shift+ 的键组合C不起作用.我已经重新订购了它们,并将它置于顶部,认为它可能是来自Ctrl+的干扰C,甚至删除Ctrl+ C以查看它是否导致问题.它仍然无法正常工作.我知道它可能非常简单,但不能完全理解它是什么.我的所有1修饰符+ 1组合键都可以正常工作,只要我添加第二个修饰符就是它不再有效.

c# keyboard-shortcuts key keydown modifier-key

24
推荐指数
3
解决办法
4万
查看次数

使用StreamWriter写入MemoryStream将返回空

我不确定我做错了什么,看过很多例子,但似乎无法让这个工作.

public static Stream Foo()
{
    var memStream = new MemoryStream();
    var streamWriter = new StreamWriter(memStream);

    for (int i = 0; i < 6; i++)
        streamWriter.WriteLine("TEST");

    memStream.Seek(0, SeekOrigin.Begin);
    return memStream;
}
Run Code Online (Sandbox Code Playgroud)

我正在对这个方法进行一个简单的测试,试图让它通过,但无论如何,我的收集计数为0.

[Test]
public void TestStreamRowCount()
{
    var stream = Foo();

    using (var reader = new StreamReader(stream))
    {
        var collection = new List<string>();
        string input;

        while ((input = reader.ReadLine()) != null)
            collection.Add(input);

        Assert.AreEqual(6, collection.Count);
    }
}
Run Code Online (Sandbox Code Playgroud)

注意:我在上面修改了一些语法而没有在Test方法中进行编译.更重要的是第一种似乎返回空流的方法(我的reader.ReadLine()总是读取一次).不确定我做错了什么.谢谢.

c# memorystream streamwriter

24
推荐指数
3
解决办法
4万
查看次数

用LINQ计算加权平均值

我的目标是根据另一个表主键从一个表中获得加权平均值.

示例数据:

表格1

Key     WEIGHTED_AVERAGE

0200    0
Run Code Online (Sandbox Code Playgroud)

表2

ForeignKey    Length    Value
0200          105       52
0200          105       60
0200          105       54
0200          105       -1
0200          47        55
Run Code Online (Sandbox Code Playgroud)

我需要根据段的长度得到加权平均值,我需要忽略值-1.我知道如何在SQL中执行此操作,但我的目标是在LINQ中执行此操作.它在SQL中看起来像这样:

SELECT Sum(t2.Value*t2.Length)/Sum(t2.Length) AS WEIGHTED_AVERAGE
FROM Table1 t1, Table2 t2
WHERE t2.Value <> -1
AND t2.ForeignKey = t1.Key;
Run Code Online (Sandbox Code Playgroud)

我仍然是LINQ的新手,并且很难弄清楚我将如何翻译它.结果加权平均值应该大约为55.3.谢谢.

c# linq weighted-average

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

mysqli:它可以在一个语句中准备多个查询吗?

我想知道我是否可以准备一个执行多个查询的mysqli语句:

mysqli->prepare(query1 ...1,2,3 param...; query2...4,5 param...);
or 
mysqli->prepare(insert into ...1,2,3 param...; insert into...4,5 param...);
and after all
mysqli->bind_param("sssss", 1, 2, 3, 4, 5);
Run Code Online (Sandbox Code Playgroud)

以这种方式它会产生错误:在...中的非对象上调用成员函数bind_param()

$stmt = $sql->getQueryPrepare("INSERT INTO user (id_user, username, pw, email) VALUES (?,?,?,?); INSERT INTO process (id_user, idp) VALUES (?,?);");

$stmt->bind_param("ssssss",$id, $username, $pw, $email, $id, $idp);

$stmt->execute();
$stmt->close(); 
Run Code Online (Sandbox Code Playgroud)

php mysql mysqli prepared-statement

16
推荐指数
2
解决办法
3万
查看次数

WPF工具栏项Horizo​​ntalAligment ="右"

是否可以使WPF工具栏中的元素具有RightAlignment为Right?

<ToolBar Height="38" VerticalAlignment="Top" Grid.Row="1">
    <Button HorizontalAlignment="Left" Width="50" VerticalAlignment="Stretch"/>
    <Button HorizontalAlignment="Left" Width="50" VerticalAlignment="Stretch"/>
    <ComboBox Width="120" HorizontalAlignment="Right"/>
</ToolBar>
Run Code Online (Sandbox Code Playgroud)

我已经尝试将元素添加到Grid中,并将ColumnDefinitions 分配给Left/Right.我也试过了StackPanel.无论我尝试什么,我似乎无法让ComboBox"锚定"在工具栏的右侧.

更新:

<DockPanel LastChildFill="True">
Run Code Online (Sandbox Code Playgroud)

不起作用,它不会像普通元素那样填充ToolBar元素.

wpf xaml toolbar alignment

13
推荐指数
3
解决办法
2万
查看次数

在构造函数中检查Null

我真的试图找出易于调试的可重用代码的最佳实践.我在开发人员中遇到了一个我不太了解的常见做法.

public MyConstructor(Object myObject)
{
    if (myObject == null)
        throw new ArgumentNullException("myObject is null.");
    _myObject = myObject;
}
Run Code Online (Sandbox Code Playgroud)

几乎没有必要做这个检查.但我认为这是因为我不完全明白做这项检查的好处是什么.似乎无论如何都会抛出一个null引用异常?我可能错了,真的很想听听它的一些想法.

谢谢.

c# null exception-handling

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

通过与BinarySearch的差异查找最接近的索引

我有一个大约500,000英特的排序数组.目前我通过获取目标int和所有元素之间的差异,然后使用LINQ(非常低效)按最小差异排序来选择正确的索引.

我希望能够做一些与BinarySearch非常相似的事情.

鉴于:

Pos Value
0   10
1   20
2   30
4   50
5   60
Run Code Online (Sandbox Code Playgroud)

如果我想找到值24的最接近的值,我希望返回的索引为1.

鉴于:

int index = myArray.BinarySearch(values, 24);
if (index < 0)
    index = ~index;
Run Code Online (Sandbox Code Playgroud)

这返回2,因为它给出了下一个元素,而不是最接近的元素.是否可以编写一个返回最接近索引的IComparer?

给定值:

Value ExpectedReturn
20    1
24    1
25    2
26    2
30    2
Run Code Online (Sandbox Code Playgroud)

我想尽快做到这一点.到目前为止,我在LINQ中所做的一切都与我认为可以通过完善的二进制搜索实现的目标相提并论.谢谢你的反馈.

c# optimization binary-search

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

将UML图导入Visual Studio

在学校,我了解到在创建项目之前创建UML图/模型是很棒的设计实践.我发现它非常有用,在这样做时我更快地处理项目,我的整体设计往往更好.

在编写代码时,我注意到了一个基本的冗余问题.在Visio中,您可以在模型中进行描述.您的类的基本大纲可以包括C#变量类型/方法.它们非常详细,Visio可以选择它是C#还是VB.

我的问题是,有这么多细节,Visio和Visual Studio 2008之间是否存在导入技术?看起来您可以将该简单模型作为Visual Studio中类的大纲导入,除了Method中的实际代码之外,声明了所有内容.这将非常有用,特别是在创建程序的设计步骤时.我的类/变量/方法已经为我声明了.我只需要回去写下代码的内容.

我已经对这个主题进行了一些搜索并且没有发现太多,似乎微软会包含一个功能来执行此操作.

c# import uml visio visual-studio

6
推荐指数
1
解决办法
5012
查看次数

C#根据枚举值获取公共变量的类型

我有一个类从逗号分隔的文本文件中解析数据.我有一个字段的枚举,以帮助我更轻松地解析数据.解析所有记录的类保存每个字段的公共变量,当然还有它们的变量类型.我需要根据给定的枚举来获取这些变量的类型.

public enum DatabaseField : int
    {
        NumID1 = 1,
        NumID2 = 2,
        NumID3 = 3,
    };

public class DataBaseRecordInfo
    {
        public long NumID1 { get; set; }
        public int NumID2 { get; set; }
        public short NumID3 { get; set; }

        public static Type GetType(DatabaseField field)
        {
           Type type;

           switch (field)
           {
               case DatabaseField.NumID1:
                   type = typeof(long);
                   break;
               case DatabaseField.NumID2:
                   type = typeof(int);
                   break;
               case DatabaseField.NumID3:
                   type = typeof(short);
                   break;
               default:
                   type = typeof(int);
                   break;
           }

           return type;
        } …
Run Code Online (Sandbox Code Playgroud)

c# enums types typeof

6
推荐指数
1
解决办法
723
查看次数

关于列表排序和委托&lambda表达式Func的东西

List<bool> test = new List<bool>();
test.Sort(new Func<bool, bool, int>((b1, b2) => 1));
Run Code Online (Sandbox Code Playgroud)

我错过了什么?

错误2参数1:无法从'System.Func'转换为'System.Collections.Generic.IComparer'

错误1'System.Collections.Generic.List.Sort(System.Collections.Generic.IComparer)'的最佳重载方法匹配有一些无效的参数

当我有

private int func(bool b1, bool b2)
{
    return 1;
}

private void something()
{
    List<bool> test = new List<bool>();
    test.Sort(func);
}
Run Code Online (Sandbox Code Playgroud)

它工作正常.他们不是一回事吗?

c#

6
推荐指数
1
解决办法
610
查看次数