这是场景.我在Visual Studio中创建一个新的类库项目,添加一些类.然后在某些时候我决定我需要一些类来标记,System.Runtime.Serialization.DataContractAttribute我写下面的内容:
[DataContract]
public class MyDataContractClass {}
Run Code Online (Sandbox Code Playgroud)
当我点击编译时,我看到以下错误:
错误CS0246:找不到类型或命名空间名称"DataMember"(您是否缺少using指令或程序集引用?)
好的,问题是我忘了添加using指令以使类可见.我加
using System.Runtime.Serialization;
Run Code Online (Sandbox Code Playgroud)
到类上面的同一个文件,但问题不会消失,直到我System.Runtime.Serialization在Project Explorer中添加引用.
这非常令人困惑.为什么我必须在不同的地方添加两次相同的东西并看到相同的错误消息,无论我错过了哪两个步骤?
我的问题如下.这只是设计错误的错误诊断,还是有一些基本原因导致错过上述两个步骤中的任何一个导致C#编译器发出的相同错误?
我有一个像这样的方法
private bool VerbMethod(string httpVerb, string methodName, string url, string command, string guid, out HttpWebResponse response)
Run Code Online (Sandbox Code Playgroud)
我这样使用它
HttpWebResponse response;
if (VerbMethod("POST", "TheMethod", "http://theurl.com", "parameter1=a", theGuid, out response))
{
using (StreamReader sr = new StreamReader(response.GetResponseStream()))
{
string responseString = sr.ReadToEnd();
}
Run Code Online (Sandbox Code Playgroud)
它返回一个bool来指定方法是否顺利,并在out参数中设置响应以获取数据.
我有时会超时,然后后续请求也会超时.我看到这个SO WebRequest.GetResponse锁定了吗?
它重新启动using关键字.问题是,用上面的方法签名我不知道该怎么做.
using与out参数?HttpWebResponse?鉴于以下内容:
namespace Foo{
class Bar{
static const auto PRIVATE = 0;
const int private_ = 1;
void ptivateFunc() { cout << 2; }
public:
static const auto PUBLIC = 3;
const int public_ = 4;
void publicFunc() { cout << 5; }
};
}
Run Code Online (Sandbox Code Playgroud)
该声明using Foo::Bar;编译......但我不确定它是什么让我访问.任何人都可以解释一下这个陈述的重点是什么以及它能让我获得什么,Bar而不仅仅是做一个using namespace Bar?
为什么在 C++ 的 using 声明语句中使用逗号分隔列表是一种不好的做法?
例如
using std::cout;
using std::cin;
using std::endl;
Run Code Online (Sandbox Code Playgroud)
被认为比代码更好
using std::cout,std::cin,std::endl;
Run Code Online (Sandbox Code Playgroud)
如果代码包含逗号分隔的 using 声明列表,一些编译器(例如 gcc)甚至会发出警告。
当然,最好的做法是对标识符使用完全限定的名称。
我正在使用此代码将 MP3 MemoryStream 写入文件:
using (var nSpeakStreamAsMp3 = new MemoryStream())
using (var nWavFileReader = new WaveFileReader(nSpeakStream))
using (var nMp3Writer = new LameMP3FileWriter(nSpeakStreamAsMp3, nWavFileReader.WaveFormat, LAMEPreset.STANDARD_FAST))
{
nWavFileReader.CopyTo(nMp3Writer);
string sPath = "C:\\inetpub\\wwwroot\\server\\bin\\mymp3.mp3";
using (FileStream nFile = new FileStream(sPath, FileMode.Create, System.IO.FileAccess.Write))
{
nSpeakStreamAsMp3.CopyTo(nFile);
}
sRet = (String.Concat("data:audio/mpeg;base64,", Convert.ToBase64String(nSpeakStreamAsMp3.ToArray())));
}
return sRet;
Run Code Online (Sandbox Code Playgroud)
由于某种我没有看到的原因,这会生成一个 0 字节的文件。但是,MP3 流是有效的并且可以工作。我将其作为 Base64String 传递到网站,并且我确实听到了它。
这里可能错误在哪里?
#include <string>
#include <variant>
int main()
{
using variant_base = std::variant< int, double >;
using variant_derived_and_flattened = std::variant< std::string, variant_base >;
// the above does not produce the desired
// std::variant< int, double, std::string >
static_assert( std::is_same< variant_base, variant_derived_and_flattened >{} );
}
Run Code Online (Sandbox Code Playgroud)
static_assert 失败。
我认为没有办法做到这一点,并希望对此进行确认,但也许有人知道如何做到这一点?
我有由模板设置的类型和大小的缓冲区。
我使用 a 存储类型using,并允许使用方法访问大小。
大小一切都很好。现在,我可以Buffer<char,6>::value_type val = 'z';从 Buffer 的实例访问类型(如 in line
)吗?
我尝试了注释语法,但失败了:
//g++ 5.4.0
#include <iostream>
using namespace std;
template<typename T, int N>
struct Buffer {
using value_type = T;
constexpr int size() { return N; }
T tab [N];
Buffer(T val) { for(int _i; _i<N ; _i++){ tab[_i]=val; } }
void p(){ for(int _i; _i<N ; _i++){ cout << tab[_i] << " "; } }
};
int main()
{
Buffer<char,6> b( 'x' ); …Run Code Online (Sandbox Code Playgroud) 我正要使用下面的 C# 代码。
await using (var producerClient = new EventHubProducerClient(ConnectionString, EventHubName))
{
using EventDataBatch eventBatch = await producerClient.CreateBatchAsync();
eventBatch.TryAdd(new EventData(Encoding.UTF8.GetBytes(eventData)));
await producerClient.SendAsync(eventBatch);
}
Run Code Online (Sandbox Code Playgroud)
但是在构建服务器中这会失败,因为上面是 C# 8.0 代码并且构建服务器只支持 C# 7.0 代码。有人可以帮我将上面的代码从 C# 8.0 转换为 C# 7.0,因为我无法让它工作吗?
样本结构:
typedef struct tagExportSettings
{
COLORREF crHeading{};
COLORREF crEvenBack{};
COLORREF crOddBack{};
COLORREF crHighlight{};
COLORREF crDate{};
COLORREF crEvent{};
COLORREF crEmpty{};
COLORREF crNotes{};
} EXPORT_SETTINGS_S;
Run Code Online (Sandbox Code Playgroud)
视觉辅助 说:
typedef可以转换为using声明。
更改此代码有什么真正的好处吗?
我在软件中的所有代码都使用EXPORT_SETTINGS_S所以我不想破坏该语法。
我知道使用预处理器指令来缩短与此类似的类型名称:
#define LL long long
Run Code Online (Sandbox Code Playgroud)
然而,我看到有人使用不同的方法:
using LL = long long;
Run Code Online (Sandbox Code Playgroud)
除了语法之外,这两者之间还有什么区别吗?在大多数情况下更推荐哪一种?
using ×10
c++ ×6
c# ×4
.net ×1
async-await ×1
asynchronous ×1
c#-7.0 ×1
class ×1
filestream ×1
memorystream ×1
named-scope ×1
out ×1
preprocessor ×1
scope ×1
struct ×1
timeout ×1
typedef ×1
variant ×1