इसलिए मैं SteamKit2 के साथ कुछ प्रयोग करने की कोशिश कर रहा हूं। और जब मैं गेम स्विच करने के लिए एक कमांड-जैसा स्विच बनाने की कोशिश कर रहा हूं, एक समस्या दिखाई दी। यह स्वयं का आदेश है '! Play STEAM GAME APPID '। जो मैं करना चाहता था, वह केवल 'प्ले!' भाग के बिना - अप्पिड नंबर को पुनः प्राप्त करना है। मैंने इसे 6 से सबस्ट्रिंग किया (चूंकि रिक्त स्थान को वर्ण के रूप में गिना जाता है), लेकिन अब मैं इस पर अनिश्चित हूं कि इसे कैसे बनाया जाए ताकि यह 6 से अधिकतम तक हो सके। मैंने जो प्रयोग किया है वह नीचे है, लेकिन यह काम नहीं करता है (थ्रो मी सिस्टम.आर्गुमेंटऑउटऑफ आरेंज एक्ससेप्शन)।

private const string PlayCmd = "!play";
ProcessCommandSystem("!play 440");

private void ProcessCommandSystem(string message)
{
    if (message.StartsWith(PlayCmd))
    {
        int appidnumeral;
        string appidraw = message.Substring(6, (message.Length));
        int.TryParse(appidraw, out appidnumeral);
        Bot.SetGamePlaying(appidnumeral);
    }
}

यह निश्चित नहीं है कि यह काम क्यों नहीं करता है, लेकिन मैं बाद में क्या करने की कोशिश कर रहा हूं कोड में, स्ट्रिंग को एक इंटीजर मान में बदलना है, क्योंकि SetGamePlaying स्ट्रिंग्स को स्वीकार नहीं करता है, इसलिए मैं इसे प्रतिस्थापित करना चाहता हूं। ('Play!' को बंद करने के लिए, केवल नंबर पर) और SetGamePlaying के लिए उपयोग करने के लिए बाद में प्रतिस्थापित चीज़ को एक पूर्णांक मान में बदलने के लिए।

0
Dragg 27 नवम्बर 2015, 17:52

4 जवाब

सबसे बढ़िया उत्तर

आप स्ट्रिंग की पूरी लंबाई लेने की कोशिश कर रहे हैं:

string appidraw = message.Substring(6, (message.Length));

जो इनपुट स्ट्रिंग की सीमा से बाहर है।

आपको उस राशि को छोटा करना होगा जो आप स्टार्ट पोजीशन द्वारा लेते हैं:

string appidraw = message.Substring(6, (message.Length - 6));

ताकि लंबाई सीमा में रहे। हालाँकि, जैसा कि टिम बताते हैं कि उनका जवाब है, आपको लंबाई तर्क की बिल्कुल भी ज़रूरत नहीं है अगर आप बस ले रहे हैं स्ट्रिंग का दाहिना हाथ हिस्सा:

string appidraw = message.Substring(6);

वैकल्पिक रूप से आप केवल स्ट्रिंग से कमांड हटाते हैं:

string appidraw = message.Replace("!play ", "");

हालाँकि, यह सभी की घटनाओं को हटा देगा "खेल!" सिर्फ पहले नहीं, इसलिए इसका उपयोग सावधानी से किया जाना चाहिए।

1
Community 23 मई 2017, 10:33

सबस्ट्रिंग दूसरे पैरामीटर के रूप में लंबाई की उम्मीद करता है, स्टार्ट इंडेक्स से लंबाई। यदि आप message.Length को 6 से जोड़ते हैं तो आप स्पष्ट रूप से स्ट्रिंग की लंबाई 6 से अधिक हो जाते हैं।

यदि आप बाकी का उपयोग करना चाहते हैं तो बिना किसी लोड के लोड करें दूसरा पैरामीटर:

string appidraw = message.Substring(6);
2
Tim Schmelter 27 नवम्बर 2015, 14:57

Substring दो तर्क लेता है: आरंभिक सूचकांक, और प्रतिस्थापन की लंबाई। आपका पहला तर्क सही है, लेकिन आपको अपना दूसरा तर्क देने के लिए (message.Length) - 6 को बदलना होगा:

string appidraw = message.Substring(6, (message.Length - 6));

सिडेनोट के रूप में, C # में, आप {{X 1}} के बजाय 0 से गिनते हैं, इसलिए स्ट्रिंग में अंतिम वर्ण का सूचकांक इसकी लंबाई कम 1 होगा। इसलिए, यदि आपको अंतिम चरित्र को संदर्भित करने की आवश्यकता है, तो आप message.Length - 1 का उपयोग कर सकते हैं।

1
helencrump 27 नवम्बर 2015, 14:55

Substring इंडेक्स शुरू करने और चार की संख्या लेने की इच्छा रखता है, अंतिम इंडेक्स नहीं (जो वैसे भी message.Length -1) होगा

उपयोग

string appidraw = message.Substring(6, (message.Length - 6));
0
Gian Paolo 27 नवम्बर 2015, 14:55