小编bob*_*lex的帖子

如何使用MongoDB C#驱动程序有条件地组合过滤器?

考虑以下过滤器:

var builder = Builders<Product>.Filter;

var filter = builder.Gte(i => i.Price, criteria.MinPrice) &
                            builder.Lte(i => i.Price, criteria.MaxPrice);
if (0 != criteria.CategoryId)
//Combine the following filter with the previous filter. How??
                var criteriaFilter = builder.Eq(i => i.CategoryId, criteria.CategoryId);
Run Code Online (Sandbox Code Playgroud)

如何组合criteriaFilterfilter

c# mongodb

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

将字符串数组加载到List <int>中最优雅的方法是什么?

考虑一个包含数值的字符串数组:

string[] intArray = {"25", "65" , "0"};
Run Code Online (Sandbox Code Playgroud)

将数字加载到a List<int>而不使用forwhile迭代的最优雅的方法是intArray什么?

c# initialization list

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

如何在不冻结UI的情况下连续更新数据网格(或任何其他UI控件)?

在WinForms应用程序中,我有一个与数据源关联的数据网格.当数据通过后台线程进入时,需要更新数据集,然后自动更新数据网格.现在,更新可以是每20秒更新7000次.问题是当这样的更新发生时UI会挂起,因为它必须发生在主线程上.这个问题有没有明确的解决方案?

通常,如何在WinForms中设计高性能的企业应用程序,其中UI在不冻结应用程序的情况下持续更新?


添加方案来解释这个:

考虑这种情况.您有一个树视图,用于表示某些分层数据.现在树上的数据更新是异步的.服务器可以同时发布一个或1000个更新.更新可以是对现有项的修改或添加新节点.需要注意的是,更新不能延迟.节点代表某个地方的实时实体.延迟更新将使用户感觉事件本身被延迟.所以这件事无法完成.如果有可能(从业务逻辑的角度来看)我会在很长一段时间内完成它.

这里有一个关键点:所有数据不需要同时可见.

所以人们不再建议这样了:

添加后台工作线程将无法帮助,因为线程必须切换到主线程才能执行更新.工作线程没有任何区别.

c# user-interface winforms

7
推荐指数
3
解决办法
4127
查看次数

无法从'const wchar_t*'转换为'_TCHAR*'

_TCHAR* strGroupName = NULL;
const _TCHAR* strTempName = NULL;

//Assign some value to strTempName

strGroupName = _tcschr(strTempName, 92) //C2440
Run Code Online (Sandbox Code Playgroud)

在VS2008中编译此代码时,我在上面的行中收到错误.在VC6中它编译得很好.

错误C2440:'=':无法从'const wchar_t*'转换为'_TCHAR*'

什么似乎是问题,我该如何解决?

c++ porting visual-c++-6 visual-studio-2008

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

错误C2011:'MSXML2 :: IXMLDOMImplementation':'struct'类型重定义

我正在更改我的C++项目,它早在VC6中,现在正在迁移到VS 2008,使用MSXML 6而不是早期的MSXML 3.当代码在VC6中时,我们通过导入使用MSXML3

# import "msxml3.dll"
Run Code Online (Sandbox Code Playgroud)

这被替换为

# import "msxml6.dll"
Run Code Online (Sandbox Code Playgroud)

在此之后,当我编译项目时,我得到了这个和其他几个类似的错误错误C2011:'MSXML2 :: IXMLDOMImplementation':'struct'类型重新定义

上述错误位于msxml3.tlh文件中.

1)为什么仍然使用msxml3?

2)我将问题缩小到MSXML.h,它以某种方式自动包含在我的项目中.为什么是这样?

3)在MSXML.h中引用了哪个版本的MSXML?

4)为什么VC++会自动包含这么多头文件?如果我不想要包含一些头文件怎么办?

5)在c ++项目中使用MSXML6的正确方法是什么?#import,头文件?????

6)我该如何解决这个问题?

随时给我.net.更清洁.VC++项目很乱.

c++ msxml3 msxml6 visual-studio-2008

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

我可以创建一个返回Task <T>同步运行的方法吗?

考虑这个相当简单的方法:

private bool ValidateKey(HttpRequestMessage message)
{

}
Run Code Online (Sandbox Code Playgroud)

上述方法如下所述

if (!ValidateKey(request))
{
//do something
}
Run Code Online (Sandbox Code Playgroud)

现在我想在ValidateKey中调用一个返回Task的方法.我们假设它是HttpRequestMessage中的ReadAsStringAsync方法:

message.Content.ReadAsStringAsync();
Run Code Online (Sandbox Code Playgroud)

既然这个方法可以异步运行,我理想情况下应该像这样调用它:

string output = await message.Content.ReadAsStringAsync();
Run Code Online (Sandbox Code Playgroud)

但是这需要我改变我的方法签名以包括async和返回类型到Task,然后调用者也包括... ad infinitum.

可以同步调用ReadAsStringAsync,即我愿意让ValidateKey等到ReadAsStringAsync完成.这样可以省去更改代码的麻烦,只是为了迎合这一方法.

c# async-await

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

将C++代码从VC6迁移到VS2008后出现错误C2678 - 找不到哪个运算符采用类型为'type'的左侧操作数

这段代码在VC6中编译文件,但在VS 2008中它会出错.谁能告诉我为什么?我想这是因为你不能再将指针与NULL(这是一个0的typedef)进行比较.如果是这种情况,我该如何在VC9中进行这种比较?

for ( std::vector<aCattrBase*>::iterator iT = attrLst.begin(); iT < attrLst.end(); iT++)
        { 
            if ( (iT != NULL) && (*iT != NULL) ) //Error: C2678
            {
//code
}
}
Run Code Online (Sandbox Code Playgroud)

错误C2678:二进制'!=':找不到运算符,它接受类型为'std :: _ Vector_iterator <_Ty,_Alloc>'的左手操作数(或者没有可接受的转换)

c++ visual-c++-6 visual-studio-2008 visual-studio

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

将DocumentDB的文档ID与类属性相关联

有没有办法将Document的唯一ID与我班级的属性相关联?

例如:

public class Product
    {


        //Associate this to ID
        public string ProductId { get; set; }
        public string UserId
        {
            get;
            set; 
        }

        public string ProductName
        {
            get;
            set;
        }
}
Run Code Online (Sandbox Code Playgroud)

问题是,我不想为我的对象创建和维护唯一的ID,而是重用DocumentDB在编写文档后创建的Id.

azure-cosmosdb

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

失踪 ; 在VC9中编译VC6代码时的标识符之前

下面的代码在VC6中编译得很好但是当我在VS2008中编译同一个项目时,它会给出以下错误错误C2146:语法错误:缺少';' 在标识符'm_pItr'之前

template <class pKey, class Data, class pCompare, 
          class hKey = int, class hCompare = less<hKey>,
          class sKey = int, class sCompare = less<sKey>,
          class tKey = int, class tCompare = less<tKey>,
          class cKey = int, class cCompare = less<cKey>>

class  GCache
{
    private:

        typedef map<pKey, Data, pCompare> PRIMARY_MAP;
        PRIMARY_MAP pMap;

        PRIMARY_MAP::iterator m_pItr; //error here

//Code truncated
}
Run Code Online (Sandbox Code Playgroud)

这里有什么不妥的想法?有能力将C++代码从VC6迁移到VC2005/2008的人可能会有所帮助.

c++ migration visual-c++-6

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

错误C2440:'初始化':无法从'std :: _ Vector_iterator <_Ty,_Alloc>'转换为'type*'

我将VC6代码迁移到VS2008时收到以下错误.此代码在VC6中工作正常,但在VC9中出现编译错误.我知道这是因为编译器破坏了变化.有什么问题,我该如何解决?

error C2440: 'initializing' : cannot convert
    from 'std::_Vector_iterator<_Ty,_Alloc>'
      to 'STRUCT_MUX_NOTIFICATION *' 
Run Code Online (Sandbox Code Playgroud)

MUX_NOTIFICATION_VECTOR::iterator MuxNotfnIterator;

for(
    MuxNotfnIterator = m_MuxNotfnCache.m_MuxNotificationVector.begin();
    MuxNotfnIterator != m_MuxNotfnCache.m_MuxNotificationVector.end();
    MuxNotfnIterator ++ 
   )
{
    STRUCT_MUX_NOTIFICATION *pstMuxNotfn = MuxNotfnIterator; //Error 2440
}
Run Code Online (Sandbox Code Playgroud)

c++ porting iterator visual-c++-6 visual-studio-2008

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

将托管类成员传递给c ++方法

我有一个C++ DLL与以下方法:

//C++ dll method (external)
GetServerInterface(ServerInterface* ppIF /*[OUT]*/)
{
//The method will set ppIF
}

//ServerInterface is defined as:
typedef void *  ServerInterface;
Run Code Online (Sandbox Code Playgroud)

为了从C#项目访问dll,我创建了一个C++/CLI项目并声明了一个托管类,如下所示:

public ref class ComWrapperManager
{
//
//
ServerInterface _serverInterface;
void Connect();
//
//
}
Run Code Online (Sandbox Code Playgroud)

我使用Connect()方法调用GetServerInterface,如下所示.第一次通话有效,第二次通话无效.有人可以解释原因吗?我需要将该指针持久化为托管类中的成员变量.有更好的方法吗?

    void Connect()
    {
    ServerInterface localServerInterface;
    GetServerInterface(&localServerInterface); //THIS WORKS

    GetServerInterface(&_serverInterface); //THIS DOESNT

    //Error 1   error C2664: 'ServerInterface ' : 
    //cannot convert parameter 1 from //'cli::interior_ptr<Type>' 
    //to 'ServerInterface *'


    }
Run Code Online (Sandbox Code Playgroud)

pointers c++-cli

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

在c#中返回泛型类型

public class Manager<T> where T: IBallGame
{
T GetManager()
{
//if T is ISoccer return new Soccer()
//if T is IFootball return new Football()

//This wont work. Why?
if (typeof(T) == typeof(ISoccer))
                return new Soccer();
}
}

Interface ISoccer: IBallgame
{
}
class Soccer: ISoccer
{
}
Interface IFootball: IBallgame
{
}
class Football:IFootball
{
}
Run Code Online (Sandbox Code Playgroud)

我已经检查了这个问题如何使方法的返回类型通用?.有没有比Convert.ChangeType()更优雅的东西?

当对类型有约束时,为什么不能返回足球或足球的实例?

c# generics

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