小编Dan*_*ker的帖子

内联If语句 - 短路

根据我的理解和阅读,您可以在if语句(&&或||)中使用短路,以便第二个条件不会触发.如果你想要两个条件都可以使用单个操作数(&或|).

所以说如果我有内联if语句如下:

var test = (MyObject != null || string.IsNullOrEmpty(MyObject.Property)) ? string.Empty : MyObject.Property;
Run Code Online (Sandbox Code Playgroud)

object reference如果MyObject为null,这将抛出错误,我认为这不应该因为我使用短路.有人可以解释一下.

c# if-statement inline short-circuiting

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

在LINQ中按即将到来的生日订购日期

我想在网格中显示即将到来的生日.我有随机顺序的值列表,我想使用LINQ 从今天的日期(假设当前日期是3月1日)获得订单.

List<DateTime> dtlist = new List<DateTime>();
Run Code Online (Sandbox Code Playgroud)
List 1 value = "25-July-1985"
List 2 value = "31-Dec-1956"       
List 3 value = "21-Feb-1978"
List 4 value = "18-Mar-2005"

输出顺序应为:

18-Mar
25-July
31-Dec
21-Feb

注意:我没有在这里使用任何数据库来获取值.

c# linq

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

CLR/Fastcall:大值类型如何在内部传递给被调用函数?

只是出于好奇:值类型通常是复制的,并且 JIT 编译器在调用方法时似乎使用 Microsoft 的 Fastcall 调用约定。这会将前几个参数放入寄存器中,以便快速访问。但是大值类型(即大于寄存器的大小或堆栈的宽度)如何传递给被调用的函数?


这本书的摘录指出:

CLR 的即时代码使用 fastcall Windows 调用约定。这允许调用者在机器的 ECX 和 EDX 寄存器中提供前两个参数(包括实例方法的情况)。

clr calling-convention

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

功能仅适用于非面向对象的语言吗?

我被要求回答这个问题:

如果我想告诉用户有关某个实例变量或方法的细节,我应该在哪里放置/**和*/的Javadoc特定注释表示法?

我回答说:

在函数声明之上.

答案被拒绝了,原因如下:

函数采用非面向对象的语言.方法是正确的名称.

这是真的?

java oop methods function

4
推荐指数
2
解决办法
567
查看次数

命名空间访问器."使用"访问者

理论问题:这样做有什么区别:

using System;
...
var foo = new String("foo");
Run Code Online (Sandbox Code Playgroud)

还有这个:

var foo = new System.String("foo");
Run Code Online (Sandbox Code Playgroud)

DLL加载?性能差异?

主要是,我怀疑在这种情况下最好的代码实践是什么?

.net c#

4
推荐指数
2
解决办法
153
查看次数

如何在.NET控制台应用程序中加载位图文件

我正在尝试使用C#创建一个控制台应用程序,它首先加载一个8位灰度级位图文件(通常是BMP)并将其转换为二维字节数组,其中(如您所料)位置x处的字节, y是像素x,y的强度.然后我有很多代码可以在位图上做一些工作作为数组.

麻烦的是我已经看到这样做来自WPF模块的调用,这些调用在控制台应用程序中是不可用的.我不想用System.Windows.Media.Imaging例如.

有没有人有任何关于如何在没有太多麻烦的情况下做到这一点的建议?

c# wpf bitmap bmp

4
推荐指数
2
解决办法
6052
查看次数

从特定位置读取C#中的二进制文件

是否可以从特定位置读取大型二进制文件?

我不想从头开始读取文件,因为我可以计算出我需要的流的起始位置和长度.

c# binary-data

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

C#Variable Getters/Setters

我正在尝试为外部程序创建一个简单的方法来获取/设置我的类中的变量.我所拥有的是一个包含多个变量的类,例如:

class myClass
{
    public int one
    {
        get{ /* get code here */ }
        set{ /* set code here */ }
    }
}
Run Code Online (Sandbox Code Playgroud)

而不仅仅是变量'one',我有接近100个变量.所有都使用get和set代码设置相同的方式.我想要的是获取和设置变量的简单方法.示例:而不必执行此操作:

myClass c = new myClass();
c.one = 5;
Run Code Online (Sandbox Code Playgroud)

我想找到一种方法来做类似的事情:

myClass c = new myClass();
c.setVariable("variableName", value);
Run Code Online (Sandbox Code Playgroud)

让"variableName"文本来自枚举列表是理想的,以便它们可以被引用为:

c.setVariable(enumName.varName, value);
Run Code Online (Sandbox Code Playgroud)

我不确定如何去做或者甚至可能.正如我所说,我有近100个需要自己的get/set代码的变量,但由于各种原因,我宁愿只有一个公共get函数和一个public set函数.

因为我不认为反射是非常有效的,所以如果可能的话,我想避免它.

我在C#中看到过其他代码,其中使用了类似的东西:

this["variableName"] = value;
Run Code Online (Sandbox Code Playgroud)

但是,我似乎无法找到一种方法来使这项工作......

c#

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

Sort()和CompareTo()方法的内部工作

我一直试图弄清楚该CompareTo()方法如何在内部工作,但我失败了.我搜索了这个网站并阅读了一些帖子,我想我已经看到了MSDN中有关这个主题的所有内容,我似乎并没有得到它.一个MSDN示例:

public int CompareTo(object obj)
{
    if (obj == null)
    {
        return 1;
    }

    Temperature otherTemperature = obj as Temperature;
    if (otherTemperature != null)
    {
        return this.temperatureC.CompareTo(otherTemperature.temperatureC);
    }
    else
    {
        throw new ArgumentException("the object is not a temperature");
    }
}
Run Code Online (Sandbox Code Playgroud)

这是该CompareTo()方法实现的MSDN示例.我理解这一点,我理解IComparable界面是如何工作的,如果我理解正确,当我使用该ArrayList.Sort()方法时会调用它.

我不明白的是:程序何时传递CompareTo(object obj)方法的参数?或者换句话说,该Sort()方法如何工作?我的意思是,这段代码将温度的实例与另一个温度实例进行比较,但是程序何时或如何获得第二个温度实例进行比较?我希望我的问题有道理.

我已经尝试在屏幕上打印CompareTo()过程,所以也许我可以对输出进行逆向工程,但我更加困惑自己.

编辑:也许如果我一步一步走,我可以更好地解释自己.假设我有3个温度对象:34,45,21 ArrayList.当我打电话时ArrayList.Sort(),这个CompareTo()方法叫做34.CompareTo(45)?然后45.CompareTo(21)呢?返回的整数在第一次比较中为1,在第二次比较中为-1?如果我只CompareTo()在obj(参数)为null 时才定义返回1 的方法,那么这些整数是如何返回的呢?我没有定义任何返回-1或0的东西.就好像我正在实现一个已经实现的方法.定义一个CompareTo()已经定义为返回-1,0和1的方法.

c# sorting icomparable compareto

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

as_mut().unwrap():由于需求冲突而无法推断生命周期

Rust生活再次让我困惑.我试图将一个可变引用返回给我拥有的盒装对象.这是我的问题简化:

pub trait Foo {
    fn foo(&self);
}

pub struct Bar {
    foo: Option<Box<Foo>>,
}

impl Bar {

    pub fn foo(&mut self) -> &mut Box<Foo> {
        let foo_ref = self.foo.as_mut();
        foo_ref.unwrap()
    }

    pub fn set_foo(&mut self, value: Box<Foo>) {
        self.foo = Some(value);
    }
}
Run Code Online (Sandbox Code Playgroud)

我得到这些错误,我真的不明白:

   Compiling testproject v0.0.1 (file:///home/virtlink/projects/orion/testproject)
src/lib.rs:15:17: 15:25 error: cannot infer an appropriate lifetime due to conflicting requirements
src/lib.rs:15         foo_ref.unwrap()
                              ^~~~~~~~
src/lib.rs:15:9: 15:25 note: first, the lifetime cannot outlive the method call at 15:8...
src/lib.rs:15         foo_ref.unwrap()
                      ^~~~~~~~~~~~~~~~ …
Run Code Online (Sandbox Code Playgroud)

lifetime rust borrow-checker

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