问题列表 - 第39957页

为什么Nullable <T>是一个结构?

我想知道为什么它Nullable<T>是一个值类型,如果它被设计为模仿引用类型的行为?我理解GC压力之类的东西,但我不相信 - 如果我们想要int表现得像参考,我们可能会对所有具有真实参考类型的后果感到满意.我没有理由Nullable<T>不仅仅是盒装版本的Tstruct.

作为价值类型:

  1. 它仍然需要装箱和取消装箱,而且,拳击必须与"普通"结构有点不同(将零值无效视为真实null)
  2. 检查null时需要区别对待(简单地完成Equals,没有真正的问题)
  3. 它是可变的,打破了结构应该是不可变的规则(好吧,它在逻辑上是不可变的)
  4. 它需要有特殊的限制来禁止递归 Nullable<Nullable<T>>

不制作Nullable<T>参考类型可以解决这个问题吗?

改写和更新:

我已经修改了我的理由列表,但我的一般问题仍然是开放的:

引用类型如何Nullable<T>比当前值类型实现更糟糕?这只是GC压力和"小的,不可改变的"规则吗?它对我来说仍然很奇怪......

c# clr nullable

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

Ruby中的简单Currying

我正试图在红宝石中做一些讨论:

def add(a,b)
  return a+b
end

plus = lambda {add}
curry_plus = plus.curry
plus_two = curry_plus[2] #Line 24
puts plus_two[3]
Run Code Online (Sandbox Code Playgroud)

我收到了错误

func_test.rb:24:in `[]': wrong number of arguments (1 for 0) (ArgumentError)
Run Code Online (Sandbox Code Playgroud)

来自func_test.rb:24:in''

但如果我这样做

plus = lambda {|a,b| a+ b}
Run Code Online (Sandbox Code Playgroud)

它似乎工作.但是在使用lambda分配后,通过打印加两种方式都返回相同类型的对象.我误解了什么?

ruby currying

12
推荐指数
2
解决办法
4483
查看次数

耙子流产了!没有这样的文件加载 - pg(在rails中创建postgre数据库)

我正在尝试使用postgresql数据库启动rails项目但是当我尝试使用以下命令创建db时:

rake db:create

我收到以下错误消息:

耙子流产了!没有这样的文件加载 - pg

我正在使用mac os X,因此postgresql被安装在/ Library文件夹中.我四处寻找pg文件,但我找不到它,我

postgresql macos rake ruby-on-rails

7
推荐指数
2
解决办法
6353
查看次数

MPI在单机双核上

如果我在一台拥有2个CPU的机器上运行需要3个节点(即mpiexec -np 3 ./Program)的MPI程序会发生什么?

parallel-processing mpi

5
推荐指数
2
解决办法
7587
查看次数

INSERT ... ON DUPLICATE KEY UPDATE .....有两个关键字段

我有一个有三个字段的表

field_one field_two field_three

我想进行插入/更新,但不是检查其中一个关键字段是否已存在,而是检查数据库中是否已存在(field_one,field_two)组合,如果是,则更新而不是插入.

mysql

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

如何在iphone地址簿中搜索特定的电话号码?

我正在开发一个应用程序,使用bonjour连接到另一个iPhone.它的一个功能是当我连接到另一台设备时,它会自动检查我是否有其他人的电话号码.所以我的问题是如何检查我的地址簿中是否有其他设备提供的电话号码?

iphone objective-c addressbook ios

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

如何在枚举单例中实现日志记录?

我正在使用枚举单例,但实现日志记录很麻烦.这个:

public enum Foo {
  INSTANCE;

  private final Logger log = Logger.getLogger(Foo.class.getName());

  ...
}
Run Code Online (Sandbox Code Playgroud)

记录器以我为普通Java类实例化记录器的方式实例化,但当然我收到以下错误:

Foo.java: illegal reference to static field from initializer 
Run Code Online (Sandbox Code Playgroud)

是否有相同的方式登录枚举单身?

java logging singleton enums

6
推荐指数
2
解决办法
8620
查看次数

.NET字符串中的货币符号放置

我正在开发一些代码来在我的应用程序中将货币符号作为标签的一部分呈现,我有一个Unicode十六进制格式的货币符号参考列表.在我的代码中,我按如下方式格式化货币:

(货币符号)(十进制字符串)(货币说明)

这种方法适用于大多数符号,但是我注意到,即使明确放置在左侧,某些符号也会自动移动到十进制值的右侧.使用调试器,即使在字符串本身的最基本级别,我也会看到这种行为,因此这不是表示层中渲染在更高级别进行任何操作的情况.以下代码展示了演示问题的简单案例:

string rialSymbol = "\ufdfc";
string amount = "123.45";
string description = "Rials";
string plainConcat = rialSymbol + " " + amount + " " + description;
Debug.WriteLine(plainConcat);
Run Code Online (Sandbox Code Playgroud)

调试输出(也与应用程序UI中的内容相匹配)如下:

123.45(里亚尔符号)里亚尔

(注意:符号位于小数点右侧而不是左侧,如指定的那样)

我已经尝试了很多方法和各种字符串格式,文化格式等,但似乎没有解决这个问题.如何在不让框架决定相对于小数值的符号位置的情况下强制执行unicode字符的放置?这适用于大多数其他角色,为什么Rial(和其他一些)导致这种类型的基本字符串行为?

.net c# currency internationalization

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

C++中的字符串溢出?这种无聊的嘟嘟声很奇怪

我正在开发一个垃圾文件生成器,但由于某种原因,如果我使用大数字,它将无限地发出哔声,直到文件完成,我认为在ascii表中某处有一个字符,或者它溢出并导致错误蜂鸣声.有人想解释为什么这件事在尖叫我吗?

#include <string>
#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <fstream>
#include <time.h>
#include <windows.h>
#define print cout<<

using namespace std;

int numberof,i;
char charvalue;
string charlist,filename;

int main()
{
    srand (time(NULL));
    print "What do you want the name of your file to be?(with a .txt extension)\n";
    getline(cin,filename);
    print "\nHow many characters do you want?\n";
    cin>>numberof;

    for(numberof>0;numberof!=0;numberof--)
        {
        i = rand() % 255 + 32;
        charvalue=i;
        charlist=charlist+charvalue;
        print charlist;
        }

    ofstream writefile(filename.c_str());
    writefile<<charlist;
    writefile.close();
    ShellExecute(NULL, "open", filename.c_str(), NULL, NULL, SW_SHOWNORMAL); …
Run Code Online (Sandbox Code Playgroud)

c++ string buffer-overflow

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

C#中存储过程的返回值返回错误

我试图在SQL Server 2005中检索存储过程的返回值,如下所示:

        OleDbCommand comm = new OleDbCommand(process_name, connection);
        comm.CommandType = CommandType.StoredProcedure;

        for (int i = 0; i < process_parameters.Length; i++)
            comm.Parameters.AddWithValue(process_parameters[i].ParameterName, process_parameters[i].Value);

        //Add output param
        comm.Parameters.Add("@TestID", OleDbType.Integer).Direction = ParameterDirection.ReturnValue;

        comm.ExecuteNonQuery();
Run Code Online (Sandbox Code Playgroud)

但是,当调用ExecuteNonQuery()时,我得到一个OleDbException,说:"过程或函数myStoredProcedure指定的参数太多了." 我的存储过程开始如下:

ALTER PROCEDURE [dbo].[spTabtempTestsINSERT]
(
            @Param1     char (64),
            @Param2     char (128),
            @Param3     char (64),
)
AS
BEGIN
    Declare     @TestID         int
Run Code Online (Sandbox Code Playgroud)

并以以下结尾:

    RETURN @TestID
END
Run Code Online (Sandbox Code Playgroud)

声明返回值而不是作为参数传递这一事实是否与它有关?如果是这样,我怎样才能获得存储过程开始后声明的参数的返回值?谢谢你的帮助.

更新:我已经尝试了目前为止建议的更改,我添加了以下行:

            OleDbCommand comm = new OleDbCommand(process_name, connection);
            comm.CommandType = CommandType.StoredProcedure;

            for (int i = 0; i < process_parameters.Length; i++)
                comm.Parameters.AddWithValue(process_parameters[i].ParameterName, …
Run Code Online (Sandbox Code Playgroud)

c# t-sql sql-server sql-server-2005 visual-studio

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