小编Mr.*_*Boy的帖子

__uuidof(someVar)是做什么的?

我发现一些代码,这是为了通话__uuidof(IMyInterface),但实际上是调用__uuidof(pIMyInterface)其中pIMyInterface的类型的指针IMyInterface__uuidof调用值而不是类型时的行为如何?

例如int x=123; __uuidof(x),这是否等于__uuidof(int)__uuidof(123)

c++ visual-c++ visual-studio-2013

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

SQL Server CLR和T-SQL存储过程是否与调用者相同?

为了编写一些虚拟存储过程,我想知道我是否可以用C#编写它们,因为我不太了解T-SQL.

相同过程的C#和T-SQL版本是否与使用标准数据库库类调用代码(例如C++/C#/ Java代码)无法区分?

c# sql-server stored-procedures clrstoredprocedure

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

对IEnumerable.GroupBy()中使用的类型有什么要求?

我使用GroupBy的是匿名类型:

var v = list.GroupBy(x => new {x.street, x.houseNumber});
var o = v.Single(x => x.Key.street == "My Street" && x.Key.houseNumber == 42);
Run Code Online (Sandbox Code Playgroud)

它运作得很好.我决定把它变成一个具体的类型:

class StreetAddress
{
 public StreetAddress(string _street,int _houseNumber){...}
 public string street{get; set;}
 public int houseNumber{get;set;}
}
var v = list.GroupBy(x => new StreetAddress(x.street, x.houseNumber));
var o = v.Single(x => x.Key == new StreetAddress("My Street", 42));
Run Code Online (Sandbox Code Playgroud)

现在'v'根本没有分组 - 具有相同Key值的项目的加载,并且o不匹配任何对象.

我需要添加什么才能StreetAddress像匿名类型那样工作?

c# linq

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

使用Reflection将Nullable属性复制到非Nullable版本

我正在编写代码,使用反射将一个对象转换为另一个对象...

它正在进行中,但我认为它将归结为以下我们相信两个属性具有相同的类型:

    private void CopyPropertyValue(object source, string sourcePropertyName, object target, string targetPropertyName)
    {
        PropertyInfo sourceProperty = source.GetType().GetProperty(sourcePropertyName);
        PropertyInfo targetProperty = target.GetType().GetProperty(targetPropertyName);
        targetProperty.SetValue(target, sourceProperty.GetValue(source));
    }
Run Code Online (Sandbox Code Playgroud)

但是我还有一个额外的问题,即源类型可能是Nullable而目标类型不是.例如Nullable<int>=> int.在这种情况下,我需要确保它仍然有效,并执行一些明智的行为,例如NOP或设置该类型的默认值.

这看起来像什么?

.net c# reflection

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

添加具有默认值的新列,而不是现有行

alter table report add favourite_film VARCHAR2(100) DEFAULT 'Star Wars';

这会添加一个具有默认值的新列,但在我看来,它还会在所有预先存在的行上设置默认值,而不是将它们保留为空,这是我的偏好。为了方便起见,我们希望添加一个具有默认值的新列,但添加此列之前的行应该具有空值。

null有没有比简单地在添加新列后立即将所有行的值设置为更好的方法?

sql oracle

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

我可以使用 LINQ 来比较两个数组中的范围吗?

我可以推出一个方法,伪:

bool Compare(IList left, int lIndex, IList right, int rIndex, int num)
{
  for(int i=0;i<num;++i)
  {
   if(left[lIndex+i] != right[rIndex+i])
   {
    return false;
   }
  }
  return true;
} 
Run Code Online (Sandbox Code Playgroud)

所以给出L =[1,2,3,4,5,6,7,8]R = [5,6,7,8,9]Compare(L,5,R,1,3) == true

我觉得我应该能够做一个简单的 LINQ 版本,但我不确定如何处理索引。它可以写成一个简单的 LINQ/lambda 吗...否则我会把它作为一个实用方法。


顺便说一下,有一个标题非常相似的问题,但它提出了不同的问题:https : //stackoverflow.com/questions/33812323/compare-two-arrays-using-linq

c# linq

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

为什么 NetworkStream.ReadAsync 没有超时?

我使用NetworkStreamTcpClient

  1. 首先我设置我的 tcp 客户端:

        tcp = new TcpClient(AddressFamily.InterNetwork)
        { NoDelay = true, ReceiveTimeout = 5000};
    
    Run Code Online (Sandbox Code Playgroud)
  2. 我的主要数据接收循环:

        while (true)
        {
            //read available data from the device
            int numBytesRead = await ReadAsync();
            Console.WriteLine($"{numBytesRead} bytes read"); //BP2
        }
    
    Run Code Online (Sandbox Code Playgroud)
  3. 和实际的 TCP 数据读取:

    public Task<int> ReadAsync()
    {
        var stream = tcp.GetStream();
        return stream.ReadAsync(InBuffer, 0, InBuffer.Length); //BP1
    }
    
    Run Code Online (Sandbox Code Playgroud)

我将它连接到一个测试平台,让我可以发送手动数据包。通过设置断点和调试,我检查了stream.ReadTimeouttcp.

如果我经常发送数据,它会按预期工作。但是如果我不发送任何数据,5 秒后似乎什么也没有发生,没有超时。我看到BP1在调试器中断点被击中,但直到我从我的测试平台发送数据,才被BP2击中。我可以离开它一分钟或更长时间,它似乎只是在等待,但在一分钟后接收发送的数据,这似乎是不正确的行为。5 秒后肯定会发生一些事情(据我所知是一个例外)?

太晚了,所以我期待一些非常基本的东西,但谁能看到我的错误和解决方案?


附录

好的,所以当我对我正在使用的实际 .Net 版本进行 RTFM 时(我有多少次被默认为 .Net …

.net c# tcpclient

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

如何让字符串插值运算符 $ 为空参数打印“null”?

string o=null;
Console.WriteLine($"Hello World '{o}'");
Run Code Online (Sandbox Code Playgroud)

这输出:

你好世界 ''

我想明确地为空值写“null”。

string o=null;
Console.WriteLine($"Hello World '{o??"null"}'");
Run Code Online (Sandbox Code Playgroud)

这就是这样做的:

你好世界“空”

但如果o不是类型string(或Object),则会生成编译错误。例如:

Array o=null;
Console.WriteLine($"Hello World '{o??"null"}'");
Run Code Online (Sandbox Code Playgroud)

编译错误运算符'??' 不能应用于“Array”和“string”类型的操作数

达到预期结果的最佳方法是什么?遗憾的是您无法修改$句柄的方式null,因为它似乎是硬编码的使用方式String.EmptyString

c# null conditional-operator null-coalescing-operator string-interpolation

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

c ++ float to bool conversion

我正在查看一些第三方代码,我不确定一行是做什么的.我无法发布确切的代码,但它是:

bool function(float x)
{
float f = doCalculation(x);
return x > 0 ? f : std::numeric_limits<float>::infinity();
}
Run Code Online (Sandbox Code Playgroud)

这显然会引发编译器关于转换float-> bool的警告,但实际行为是什么?Visual C++如何将浮动转换为bools?至少我应该能够取代那令人讨厌的无限......

c++ visual-c++

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

创建一个简单的脚本化"语言" - 类似VARIANT的值类型

对于使用C++开发的规则引擎,其中一个核心功能是值类型.到目前为止,我有点像COM风格的VARIANT - 每个值都知道它的类型.类型转换有一些规则,但它有点乱.

我想知道是否有可以使用的好的插入值类来解决这个问题,而不需要我使用整个预构建的系统.比如说升压有什么意义吗?

c++ variant

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