小编sha*_*oth的帖子

如何将字符串与C#中的大量预定义字符串进行比较?

在C#程序中,我有一个String变量,我想将它与一百个预定义(硬编码)字符串文字进行比较,以便我知道它是否匹配任何这些预定义的字符串.

我当然可以编写一个switch或一个if-else ifs 链但这种方式字符串与控制语句和IMO交错,这降低了可读性并使种植错误变得更容易.

有没有办法以某种方式列出所有字符串,以便它们尽可能在代码中彼此靠近?

c# string

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

为什么通过同一COM对象的不同接口检索的IUnknown*指针具有相同的值?

我有以下COM接口层次结构和一个实现它们的类:

interface IX : public IUnknown{};
interface IY : public IUnknown{};
class CA: public IX, public IY{};
Run Code Online (Sandbox Code Playgroud)

这里class CA有效地继承了IUnknown两次.

我们知道有两个vtable指针class CA- 一个指向IX,另一个指向IY.因此IUnknown存储在IX子对象中与IUnknown存储在IY子对象中不同.

然而,当我们调用IX::QueryInterface()IY::QueryInterface()在相同的对象和查询时,IUnknown我们得到相同的IUnknown*指针.

为什么会这样?

c++ windows com inheritance multiple-inheritance

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

可以调用内存分配和构造函数与执行"新"表达式所需的其他操作交错吗?

假设我有以下课程:

 class Sample {
 public:
     Sample( int ) {}
 };
Run Code Online (Sandbox Code Playgroud)

一些函数返回 int

int SomeFunction()
{
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

而这段代码:

Sample* sample = new Sample( SomeFunction() );
Run Code Online (Sandbox Code Playgroud)

现在我期待以下顺序:

  • SomeFunction() 然后运行
  • ::operator new() 然后运行以为对象分配内存
  • class Sample 构造函数在已分配的内存上运行

这个顺序是固定的还是可以通过实现来改变,例如说第一个内存被分配,然后SomeFunction()调用,然后运行构造函数?换句话说,可以调用operator new()函数并调用类构造函数与任何东西交错吗?

c++ constructor class new-operator

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

如何在Windows Azure中安装和使用COM对象?

我有很多32位C++代码,我想在Windows Azure Compute Service中运行.代码已经打包到COM服务器中,所以我想从托管代码中使用该服务器来处理外部请求.

我用Google搜索但无法找到有关如何在Windows Azure下部署COM服务器的任何详细信息.我怎么做?有导游吗?有什么限制?

windows cloud com deployment azure

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

"sizeof"如何在这个帮助器中用于确定数组大小?

我发现这篇文章提出了以下模板和一个用于获取数组大小的宏:

template<typename Type, size_t Size>
char ( &ArraySizeHelper(Type( &Array )[Size]) )[Size];
#define _countof(Array) sizeof(ArraySizeHelper(Array))
Run Code Online (Sandbox Code Playgroud)

我发现以下部分完全不清楚.sizeof应用于函数声明.我希望结果是"函数指针的大小".为什么它会获得"返回值的大小"呢?

c++ arrays size templates

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

我的C#程序如何根据存在的程序集而有所不同?

我想从我的Windows Azure Web应用程序中的自托管Web应用程序中重用一些代码逻辑.目前我的代码如下:

void myFunction( params )
{
   //environment-neutral code
}
Run Code Online (Sandbox Code Playgroud)

我需要重写该代码,以使程序采取不同的行动,具体取决于是否在Azure上:

void myFunctionModified( params )
{
    if( onAzure() ) {
       //run Azure-specific code
    } else {
       //run non-Azure code
    }
}
Run Code Online (Sandbox Code Playgroud)

是的,我知道虚函数,但我需要这样的代码,至少可以在调用那些虚函数之前实例化正确的对象.

问题是实现onAzure()我需要使用仅存在于Windows Azure上的程序集中的东西(RoleEnvironment例如).因此,我不知道如何实现,onAzure()以便在Windows Azure环境之外运行时不会崩溃.

如何根据系统中存在的程序集使应用程序采取不同的行为?

.net c# cloud assemblies azure

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

临时存储时间的要求是什么?

请考虑以下代码:

class Test() {
public:
    Test()
    {
       memset( buffer, 0, sizeof( buffer ) );
    }
    void Process()
    {
       printf( buffer );
    }
private:
    char buffer[1000];
};

int main()
{
    Test().Process();
    char buffer[1000] = {};
    print( buffer );
    return 0;      
}
Run Code Online (Sandbox Code Playgroud)

我无法推断是否buffer允许在main中重用以前由临时对象占用的内存class Test.根据标准自动存储(3.7.2/1)必须至少持续到块结束.

我找不到强制临时对象使用自动存储的措辞,除了6.6/2,其中描述了一个跳转语句,并说在退出范围[...]时,所有构造对象都会调用析构函数(12.4)具有自动存储持续时间(3.7.2)(命名对象或临时对象),这似乎意味着临时使用自动存储.

临时工需要使用自动存储吗?main上面代码中的局部变量是否允许重用以前由临时占用的内存,还是应该使用不同的存储?

c++ memory memory-management duration

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

重写AuthorizeAttribute.AuthorizeCore时,"无法在HTTP标头后设置状态"

我正在尝试在MVC 2应用程序的特定控制器上实现自定义基本身份验证.具体来说,我继承AuthorizeAttribute并覆盖AuthorizeCore()方法:

protected override bool AuthorizeCore(HttpContextBase httpContext)
{
    if( doAuthorization() ) {
        return true;
    }
    // send HTTP 401
    HttpContext context = HttpContext.Current;
    context.Response.StatusCode = 401;
    context.Response.AddHeader( "WWW-Authenticate",
        String.Format("Basic realm=\"{0}\"", myRealm);
    context.Response.End();
    return false;
}
Run Code Online (Sandbox Code Playgroud)

并使用我的继承属性标记控制器.

整个过程都有效,但每当AuthorizeCore返回falseMVC继续处理请求并被Application_Error()调用时,我会在那里检索以下异常:

Server cannot set status after HTTP headers have been sent.
at System.Web.HttpResponse.set_StatusCode(Int32 value)
at System.Web.Mvc.ControllerActionInvoker.InvokeAction(ControllerContext controllerContext, String actionName)
at System.Web.Mvc.Controller.ExecuteCore()
at System.Web.Mvc.MvcHandler.<>c__DisplayClass8.<BeginProcessRequest>b__4()
at System.Web.Mvc.Async.AsyncResultWrapper.<>c__DisplayClass1.<MakeVoidDelegate>b__0()
at System.Web.HttpApplication.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute()
at System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously)
Run Code Online (Sandbox Code Playgroud)

如何让MVC停止处理请求并防止该异常?

.net asp.net iis asp.net-mvc

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

如何在SQL Azure中的另一列上重新创建聚簇索引?

SQL Azure不仅要求每个表都具有聚簇索引,还要求不允许DROP INDEX聚簇索引.

现在我有一个表错误地在列上有一个聚簇索引A,我希望它在列上有一个聚簇索引B.

如果不允许删除聚簇索引,如何在另一列上创建聚簇索引?

sql sql-server indexing azure azure-sql-database

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

在C++中删除不完整类型不是错误时是否存在实际情况?

当应用于指向不完整类型的指针时,Visual C++会出现C4150警告delete.

根据标准,此类案件会产生不确定的行为.在Visual C++中的AFAIK,它们导致默认operator delete()函数,并且不会调用析构函数,这会导致许多错误.

现在我可以用#prarma warning( error : 4150 )Visual C++将该警告视为错误.我想有一些原因是为什么它是一个警告而不是默认情况下在Visual C++中的错误.

我想在哪些现实代码中允许这样的情况?为什么我不将该警告切换为编译器错误?

c++ compiler-construction compiler-warnings visual-c++ delete-operator

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