public void AddAll(IDictionary<string, ApiLimit> resources)
{
- foreach (var res in resources)
+ foreach (var (key, value) in resources)
{
- this.innerDict[res.Key] = res.Value;
+ this.innerDict[key] = value;
}
this.Owner.OnAccessLimitUpdated(new AccessLimitUpdatedEventArgs(null));
// その他
group = this.ListViewApi.Groups[1];
var apiStatuses = MyCommon.TwitterApiInfo.AccessLimit.Where(x => !_tlEndpoints.Contains(x.Key)).OrderBy(x => x.Key);
- foreach (var pair in apiStatuses)
+ foreach (var (endpoint, apiLimit) in apiStatuses)
{
- AddListViewItem(pair.Key, pair.Value, group);
+ AddListViewItem(endpoint, apiLimit, group);
}
MyCommon.TwitterApiInfo.AccessLimitUpdated += this.TwitterApiStatus_AccessLimitUpdated;
Dictionary<string, string> parameter = GetOAuthParameter(consumerKey, token);
// OAuth共通情報にquery情報を追加
if (query != null)
- foreach (KeyValuePair<string, string> item in query)
- parameter.Add(item.Key, item.Value);
+ foreach (var (key, value) in query)
+ parameter.Add(key, value);
// 署名の作成・追加
parameter.Add("oauth_signature", CreateSignature(consumerSecret, tokenSecret, httpMethod, requestUri, parameter));
// HTTPリクエストのヘッダに追加
if (realm != null)
sb.AppendFormat("realm=\"{0}\",", realm);
- foreach (KeyValuePair<string, string> item in parameter)
+ foreach (var (key, value) in parameter)
// 各種情報のうち、oauth_で始まる情報のみ、ヘッダに追加する。各情報はカンマ区切り、データはダブルクォーテーションで括る
- if (item.Key.StartsWith("oauth_", StringComparison.Ordinal))
- sb.AppendFormat("{0}=\"{1}\",", item.Key, MyCommon.UrlEncode(item.Value));
+ if (key.StartsWith("oauth_", StringComparison.Ordinal))
+ sb.AppendFormat("{0}=\"{1}\",", key, MyCommon.UrlEncode(value));
return sb.ToString();
}
{
if (param != null)
{
- foreach (var kv in param)
- postContent.Add(new StringContent(kv.Value), kv.Key);
+ foreach (var (key, value) in param)
+ postContent.Add(new StringContent(value), key);
}
if (media != null)
{
- foreach (var kv in media)
- postContent.Add(new StreamContent(kv.Value.OpenRead()), kv.Key, kv.Value.Name);
+ foreach (var (key, value) in media)
+ postContent.Add(new StreamContent(value.OpenRead()), key, value.Name);
}
request.Content = postContent;
return false;
}
+
+ public static void Deconstruct<TKey, TValue>(this KeyValuePair<TKey, TValue> kvp, out TKey key, out TValue value)
+ {
+ key = kvp.Key;
+ value = kvp.Value;
+ }
}
}
if ((modifiers & ModKeys.Shift) == ModKeys.Shift) modKey |= Keys.Shift;
if ((modifiers & ModKeys.Win) == ModKeys.Win) modKey |= Keys.LWin;
var key = new KeyEventArgs(hotkey | modKey);
- foreach (var kvp in this._hotkeyID)
+ foreach (var (_, value) in this._hotkeyID)
{
- if (kvp.Value.KeyEvent.KeyData == key.KeyData && kvp.Value.Value == hotkeyValue) return true; // 登録済みなら正常終了
+ if (value.KeyEvent.KeyData == key.KeyData && value.Value == hotkeyValue) return true; // 登録済みなら正常終了
}
var hotkeyId = NativeMethods.RegisterGlobalHotKey(hotkeyValue, (int)modifiers, this._targetForm);
if (hotkeyId > 0)
lock (this.lockObject)
{
- foreach (var item in this.innerDictionary)
+ foreach (var (_, task) in this.innerDictionary)
{
- var task = item.Value;
if (task.Status == TaskStatus.RanToCompletion)
task.Result?.Dispose();
}
var removeKeys = new List<DateTime>();
var tweetsInWindow = 0;
- foreach (var pair in this.tweetsTimestamps)
+ foreach (var (timestamp, count) in this.tweetsTimestamps)
{
- if (now - pair.Key > oneHour)
- removeKeys.Add(pair.Key);
+ if (now - timestamp > oneHour)
+ removeKeys.Add(timestamp);
else
- tweetsInWindow += pair.Value;
+ tweetsInWindow += count;
}
Interlocked.Exchange(ref this.tweetsPerHour, tweetsInWindow);
});
}
- foreach (var tab in this.TabInfo.Tabs)
+ foreach (var (name, tab) in this.TabInfo.Tabs)
{
- if (!tab.Value.IsDistributableTabType) continue;
+ if (!tab.IsDistributableTabType) continue;
this.TabList.Items.Add(new TabListItem
{
- Label = tab.Key,
- Tab = tab.Value,
+ Label = name,
+ Tab = tab,
});
}
}