考虑以下过滤器:
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)
如何组合criteriaFilter和filter?
考虑一个包含数值的字符串数组:
string[] intArray = {"25", "65" , "0"};
Run Code Online (Sandbox Code Playgroud)
将数字加载到a List<int>而不使用for或while迭代的最优雅的方法是intArray什么?
在WinForms应用程序中,我有一个与数据源关联的数据网格.当数据通过后台线程进入时,需要更新数据集,然后自动更新数据网格.现在,更新可以是每20秒更新7000次.问题是当这样的更新发生时UI会挂起,因为它必须发生在主线程上.这个问题有没有明确的解决方案?
通常,如何在WinForms中设计高性能的企业应用程序,其中UI在不冻结应用程序的情况下持续更新?
添加方案来解释这个:
考虑这种情况.您有一个树视图,用于表示某些分层数据.现在树上的数据更新是异步的.服务器可以同时发布一个或1000个更新.更新可以是对现有项的修改或添加新节点.需要注意的是,更新不能延迟.节点代表某个地方的实时实体.延迟更新将使用户感觉事件本身被延迟.所以这件事无法完成.如果有可能(从业务逻辑的角度来看)我会在很长一段时间内完成它.
这里有一个关键点:所有数据不需要同时可见.
所以人们不再建议这样了:
添加后台工作线程将无法帮助,因为线程必须切换到主线程才能执行更新.工作线程没有任何区别.
_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++项目,它早在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++项目很乱.
考虑这个相当简单的方法:
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完成.这样可以省去更改代码的麻烦,只是为了迎合这一方法.
这段代码在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>'的左手操作数(或者没有可接受的转换)
有没有办法将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.
下面的代码在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的人可能会有所帮助.
我将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++ 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) 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()更优雅的东西?
当对类型有约束时,为什么不能返回足球或足球的实例?