小编Kyl*_*ven的帖子

方法使用三元运算符调用

在玩弄新概念时,我偶然发现了Ternary Operator它的美丽.在玩了一段时间之后,我决定测试它的极限.

然而,当我无法编译某段代码时,我的乐趣很快就结束了.

int a = 5;
int b = 10;
a == b ? doThis() : doThat() 

    private void doThis()
    {
        MessageBox.Show("Did this");
    }
    private void doThat()
    {
        MessageBox.Show("Did that");
    }
Run Code Online (Sandbox Code Playgroud)

这行给了我两个错误:

Error   1   Only assignment, call, increment, decrement, and new object expressions can be used as a statement
Error   2   Type of conditional expression cannot be determined because there is no implicit conversion between 'void' and 'void'
Run Code Online (Sandbox Code Playgroud)

我从来没有使用Ternary Operator过来决定调用哪种方法,也不知道它是否可行.我只是喜欢一行If Else Statement方法调用的想法.

我做了一些研究,我找不到任何人这样做的例子,所以我想我可能希望有一些无法提供的东西. …

c# conditional-operator

41
推荐指数
5
解决办法
3万
查看次数

Visual Studio断点警告

在调试我的代码时,我经常抛出断点来检查局部变量的值,以确保一切都在正确的轨道上.

最近,当我对我的代码进行更改并重新编译时,我的所有断点都变成了圆圈的轮廓(而不是一个完整的红色圆圈)并且它给出了一个读取的错误;

断点当前不会被击中.此行没有可执行代码.可能的原因包括:条件编译或编译器优化.

这个问题的奇怪之处在于我可以简单地删除并添加断点,一切都可以正常工作.

我没有使用任何类型的条件编译或编译器优化.有谁知道这意味着什么或如何解决这个问题?每次编译时替换10-12个断点都会非常烦人.

c# breakpoints visual-studio-2008 visual-studio

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

使用语句与命名空间路径?C#

我最近停止使用,而是使用我调用的任何对象的完整命名空间路径.

例:

using System;    

namespace QuizViewer
{
    class Class1
    {
        Console.WriteLine("Hello World!");
    }
}
Run Code Online (Sandbox Code Playgroud)

这就是我现在所做的.

namespace QuizViewer
{
    class Class1
    {
        System.Console.WriteLine("Hello World!");
    }
}
Run Code Online (Sandbox Code Playgroud)

在你问为什么我这样做之前,我正在使用这种风格,以便我可以准确地看到我的对象来自哪里,并且在使用不同的Timer对象和具有相似名称的其他对象时更容易.

这种编程风格是否有任何性能提升或降低?

.net c# namespaces using-statement

20
推荐指数
5
解决办法
5902
查看次数

C#在Process.Kill()期间只完成了ReadProcessMemory或WriteProcessMemory请求的一部分

我一直在广泛研究这个问题,似乎无法找到答案.

我知道Only part of a ReadProcessMemory or WriteProcessMemory request was completed当32位进程尝试访问64位进程时会抛出异常,而对于64位进程修改32位进程则会抛出异常.

该问题的解决方案是将平台目标更改为"任何CPU".我试过这个,不幸的是这并没有解决我的问题.

下一个代码块是不断抛出异常的原因.运行此代码的程序用于在远程计算机上打开应用程序,并保留程序本身打开的所有进程的列表,这样我就不必遍历所有进程.

Process processToRemove = null;
lock (_runningProcesses)
{
    foreach (Process p in _runningProcesses)
    {
        foreach (ProcessModule module in p.Modules)
        {
            string[] strs = text.Split('\\');

            if (module.ModuleName.Equals(strs[strs.Length - 1]))
            {
                processToRemove = p;
                break;
            }
        }
        if (processToRemove != null)
        {
            break;
        }
    }
    if (processToRemove != null)
    {
        processToRemove.Kill();
        _runningProcesses.Remove(processToRemove);
    }
}
Run Code Online (Sandbox Code Playgroud)

这些过程可以并且很可能是32位和64位混合在一起.

我有什么我不应该做的事情,或者是否有更好的方法来做所有这些?

c# exception process

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

Powerpoint VBA App_SlideShowBegin

要在Powerpoint中使用SlideShowBegin事件,您必须按以下方式配置类模块:

Public WithEvents App As Application

    Private Sub App_SlideShowBegin(ByVal Wn As SlideShowWindow)
        MsgBox "SlideShowBegin"
    End Sub
Run Code Online (Sandbox Code Playgroud)

然后,在非类模块内部,您必须创建该类型的对象并将App设置为Application.

Dim X As New Class1

Sub InitializeApp()
Set X.App = Application
End Sub
Run Code Online (Sandbox Code Playgroud)

现在,我唯一的问题是,如果您没有使用Powerpoint中的宏菜单手动调用InitializeApp,则事件不起作用.你必须先调用这个子,然后才能在幻灯片的开头调用包含这个子的东西.

在运行我的powerpoint之前,如何调用此sub?有一个更好的方法吗?

编辑:

我已经尝试过使用Class_Initialize,但只有在第一次使用它时才会被调用,或者你会发出类似的语句 Dim X as Class1; X = new Class1

events powerpoint vba

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

使用 IXmlSerializable 对象序列化对象时出现 InvalidOperationException

我在 XmlSerializer 中遇到了一些有趣的行为。

如果我尝试序列化一个具有Typeobject属性并且该对象实现的类IXmlSerializable,序列化程序将抛出一个InvalidOperationException带有InnerException

在此上下文中不能使用类型 ConsoleApplication1.MyClass。要将 ConsoleApplication1.MyClass 用作参数、返回类型或类或结构的成员,必须将参数、返回类型或成员声明为类型 ConsoleApplication1.MyClass(不能是对象)。ConsoleApplication1.MyClass 类型的对象不能用于无类型集合,例如 ArrayLists。

但是,如果对象没有实现IXmlSerializable,序列化程序将执行得很好。

这是 XmlSerializer 处理 IXmlSerializable 对象的方式中的错误吗?

下面是一个非常基本的情况,会导致抛出此异常。

public class SerializableClass
{
    public object Configuration { get; set; }
}

public class MyClass : IXmlSerializable
{
    public string MyProperty { get; set; }

    public MyClass()
    {
        MyProperty = string.Empty;
    }

    public System.Xml.Schema.XmlSchema GetSchema() { return null; }

    public void ReadXml(System.Xml.XmlReader reader) { /*Read*/ }

    public void WriteXml(System.Xml.XmlWriter writer) { /*Write*/ …
Run Code Online (Sandbox Code Playgroud)

c# serialization object xml-serialization

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

添加到具有位置的可滚动面板

嘿伙计们,我用a Panel来保存控件列表(用户自定义).我添加面板的方式,我将基于Panel.Controls.Count之前添加到面板之前设置控件的位置.

comRec.Location = new Point(comRec.Location.X, panel1.Controls.Count * 25);
panel1.Controls.Add(comRec);
Run Code Online (Sandbox Code Playgroud)

现在,这很好用,看起来就像我想要的那样.但是,一旦我们达到窗口的限制,AutoScroll启用(我想要的).现在,如果用户要滚动到底部Panel,这最终会更改面板中每个控件的位置.而不是我的第一个comRec.Location(0,0),它类似于(0,-219).所以现在,当用户添加另一个comRec对象时,它会在对象之间创建巨大的间隙.

我的问题是,使用滚动条考虑位置变化并使用我的添加系统的最佳方法是什么.我假设必须做一些检查滚动条的值并使用它来确定位置.

此外,是否有更好的方式来显示控件列表?我应该使用Panel吗?

.net c# user-controls panel

4
推荐指数
1
解决办法
2007
查看次数

构造函数参数的命名约定?

嘿伙计们,我总是遇到一个问题,即类中的Public变量的名称和我传递给相同类构造函数的参数之间的相似性.

在定义对象的新实例时,例如Car.用户/程序员唯一能看到的是它所寻找的参数的名称和类型.

例如:

public Car(Color BodyColor, int NumOfDoors, int SizeOfWheels)
{
}
Run Code Online (Sandbox Code Playgroud)

用户将看到这些名称和类型,并且只能根据其类型和名称知道它们是什么,从而排除任何xml摘要标记.

现在,我们总是希望我们的公共变量也非常具体.

例如:

public Color BodyColor { get; set; }
public int NumOfDoors { get; set; }
public int SizeOfWheels { get; set; }
Run Code Online (Sandbox Code Playgroud)

现在,我们可以回答我的问题.使用这些单行属性,而不是定义变量的私有实例并为其创建属性,如何使这些变量名称更清晰?

我正在尝试使用其他用户可以理解且易于阅读的命名约定.

现在构造函数看起来像

public Car(Color BodyColor, int NumOfDoors, int SizeOfWheels)
{
     this.BodyColor = BodyColor;
     this.NumOfDoors = NumOfDoors;
     this.SizeOfWheels = SizeOfWheels;
}
Run Code Online (Sandbox Code Playgroud)

这是其他C#程序员写的吗?是否存在已存在的命名约定?乍一看,上面的陈述看起来有点乱,特别是如果你省略了this.

c# constructor properties naming-conventions

4
推荐指数
1
解决办法
8456
查看次数

删除 VB.Net 中的“不可见”控制字符

我目前正在使用 VB.Net 读取文本文件

Dim fileReader As String
fileReader = My.Computer.FileSystem.ReadAllText(file)
Run Code Online (Sandbox Code Playgroud)

文件包含多行文本,当我读入文本文件时,它知道它们在不同的行上并相应地将它们打印出来。

但是,当我尝试将 fileReader 拆分为不同行的数组时,即使我使用Split(ControlChars.Cr)Split(ControlChars.NewLine). 它会成功地将其拆分为单独的行,但是当我显示它时,它会将文本“推”下一行,就像换行符仍然存在一样......

有没有人对正在发生的事情以及如何删除这些“隐形”控制字符有任何想法。

文本文件:

测试1
的Test2
Test3的
TEST4

文件阅读器:

测试1
的Test2
Test3的
TEST4

行()打印输出

测试1

的Test2

Test3的

TEST4

vb.net file-io control-characters visual-studio-2008

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

是否可以在 C# 中创建自定义运算符?

可能的重复:
是否可以在 C# 中创建一个新的运算符?

我想知道是否有可能创建自定义运算符,例如if (a atleast 5)在 C# 中。

上述声明如下:if a is at least 5 then do this.

我正在寻找更多关键字类型运算符,例如typeofor is

c# operators keyword operator-keyword

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

从函数中替换char []中的字符

如何让我的replace_char函数正常工作?

我在下面的函数中尝试它的方式使用Ubuntu中的gcc返回分段错误.

我尝试过其他方法,但每次尝试更改值时,都会出错.

int main (void)
{  
  char* string = "Hello World!";

  printf ("%s\n", string);
  replace_char(string, 10, 'a');
  printf ("%s\n", string);
}

void replace_char(char str[], int n, char c)
{
  str[n] = c;
}
Run Code Online (Sandbox Code Playgroud)

c arrays string replace character

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