Flush()如果我写这样的东西,我不确定是否需要调用使用过的对象:
using (FileStream...)
using (CryptoStream...)
using (BinaryWriter...)
{
// do something
}
Run Code Online (Sandbox Code Playgroud)
它们总是自动刷新吗?什么时候该using声明冲洗它们,当它不(如果可能发生)?
由于我使用两个不同的通用集合名称空间(System.Collections.Generic和Iesi.Collections.Generic),我有冲突.在项目的其他部分,我使用的是nunit和mstest框架,但是当我打电话时Assert我想要使用nunit版本
using Assert = NUnit.Framework.Assert;
Run Code Online (Sandbox Code Playgroud)
哪个效果很好,但我想用泛型类型做同样的事情.但是,以下行不起作用
using ISet = System.Collections.Generic.ISet;
using ISet<> = System.Collections.Generic.ISet<>;
Run Code Online (Sandbox Code Playgroud)
有谁知道如何告诉.net如何使用泛型的using语句?
using (DbConnection conn = new DbConnection())
{
// do stuff with database
}
Run Code Online (Sandbox Code Playgroud)
请问using块调用conn.Close()?
新的Visual Studio 2012抱怨我一直使用的常见代码组合.我知道这似乎有点矫枉过正,但我在我的代码中做了以下'只是为了确定'.
using (var fs = new FileStream(filePath, FileMode.Open, FileAccess.Read, FileShare.ReadWrite))
{
using (var sr = new StreamReader(fs))
{
// Code here
}
}
Run Code Online (Sandbox Code Playgroud)
Visual Studio正警告我,我不止一次处理fs.所以我的问题是这样,写这个的正确方法是:
using (var fs = new FileStream(filePath, FileMode.Open, FileAccess.Read, FileShare.ReadWrite))
{
var sr = new StreamReader(fs);
// do stuff here
}
Run Code Online (Sandbox Code Playgroud)
或者我应该这样做(或者没有提到的其他变体).
var fs = new FileStream(filePath, FileMode.Open, FileAccess.Read, FileShare.ReadWrite);
using (var sr = new StreamReader(fs))
{
// Code here
}
Run Code Online (Sandbox Code Playgroud)
我在StackOverflow中搜索了几个问题,但没有找到直接解决此组合的最佳实践的问题.
谢谢!
显然,类型别名和模板化类型别名在语义上等同于typedef,并且是typedef的扩展,以支持模板.为什么using为这些创建了关键字的新语法,而不是使用typedef作为第一个和一些语法扩展的单词typedef.
注意:这不是"使用和typedef之间的区别"问题的克隆.我知道这样可以using定义一个typedefs 族.我要问的是,为什么标准人员决定使用此using关键字而不是typedef关键字.这似乎只会增加语言的混乱.
在using语句中使用内存流时,是否需要调用close?例如这里需要ms.Close()吗?
using (MemoryStream ms = new MemoryStream(byteArray))
{
// stuff
ms.Close();
}
Run Code Online (Sandbox Code Playgroud) 我的目标是在使用模板模板参数定义其他类型时记录模板化类型的名称.我遇到的问题是结果类型被认为是不等价的.
为了实现这一点,我尝试使用模板化的"使用"别名来记录作为模板模板参数给出的名称.然后我引用别名来恢复名称.这有用的一个例子是当我有一个模板化函数,它返回一个带有需要推导出的模板模板参数的类型.
以下代码显示了我的方法:
include <type_traits>
template<typename X>
struct TT {};
template<template<typename> class T>
struct UU {
template<typename X>
using name = T<X>;
};
template<template<typename> class T>
struct VV {};
int main() {
static_assert(std::is_same<
TT<int>,
UU<TT>::template name<int>
>::value, "Templated type instances are distinct");
static_assert(std::is_same<
VV<TT>,
VV<UU<TT>::template name>
>::value, "Template type instances using template names are distinct");
return 0;
}
Run Code Online (Sandbox Code Playgroud)
编译如下:
c++ -std=c++14 Test.cpp -o Test
Run Code Online (Sandbox Code Playgroud)
产量:
Test.cpp:20:3: error: static_assert failed "Template type instances using template names are distinct"
Run Code Online (Sandbox Code Playgroud)
还有另一种录制和使用模板名称的方法吗?
有人可以指示我指定此行为的标准部分吗?
我对学习C#(来自Java和C++背景)相当新,我对手动垃圾处理有疑问:是否有可能手动销毁C#中的对象?我知道IDisposable接口,但是假设我正在处理一个我没写过的类而且它没有实现它?它不会有一个.Dispose()方法,使和using { }超出,并且.Finalize始终为protected还是private这样,要么是不是一种选择.
(我只是想了解什么是可能在C#在这种情况下,我想,如果一切都失败了,我可以继承的假设ImNotDisposable类,以便它不实现IDisposable.)
我需要强制使用"使用"来处理类的新实例.
public class MyClass : IDisposable
{
...
}
using(MyClass obj = new MyClass()) // Force to use "using"
{
}
Run Code Online (Sandbox Code Playgroud) 我碰巧发现可以使用using指令直接在封闭类之外访问嵌套的私有模板类:
class wrapper
{
private:
template <typename T>
class __tklass {};
class __klass {};
};
template <typename T>
using tklass = wrapper::__tklass<T>; // Expected error but compiles OK
// using klass = wrapper::__klass; // "Error: __klass is private"
int main()
{
tklass<int> v1; // Expected error but compiles OK
// wrapper::__tklass<int> v3; // "Error: __tklass is private"
// wrapper::__klass v4; // "Error: __klass is private"
}
Run Code Online (Sandbox Code Playgroud)
标记为"错误:__ xxxx为私有"的行在取消注释时正确报告错误.但是tklass编译的行没有编译器的任何抱怨.
那么,为什么编译器标记tklass为错误,尽管wrapper::__tklass它是私有的?是否有标准允许的任何机会?如果是这样,那不会被认为是严重的访问违规行为吗?
我试过gcc-4.9.2,clang-3.5.0和visual studio 2013 …